Lo que quiero decir es, decir que tengo un struct
para representar algunos datos y se ve así:Si tengo tres valores separados que podrían caber en 32 bits, ¿tiene sentido usar un uint para almacenarlos?
struct LilStruct
{
public readonly short A;
public readonly byte B;
public readonly byte C;
public LilStruct(short a, byte b, byte c)
{
A = a;
B = b;
C = c;
}
}
A short
y dos byte
valores podrían encajar en todos los 32 bits. Lo que me pregunto es (para la alineación, el rendimiento, lo que sea) si sería realmente tiene sentido para almacenar estos datos en el formato siguiente en su lugar:
struct LilStruct
{
private readonly uint _value;
public LilStruct(short a, byte b, byte c)
{
_value = ((uint)a << 16) | ((uint)b << 8) | (uint)c;
}
public int A
{
get { return (int)(_value >> 16); }
}
public int B
{
get { return (int)(_value >> 8) & 0x000000FF; }
}
public int C
{
get { return (int)(_value & 0x000000FF); }
}
}
Es este sentido? ¿Cuáles serían los beneficios/inconvenientes?
independientemente de la respuesta, creo que es grandioso que esto se haya planteado. Personalmente, creo que es bueno ser pragmático. – DevSolo