Если у меня есть три отдельных значения, которые все могут вписаться в 32 бита, имеет ли смысл использовать uint для их хранения?

Я имею в виду, скажем, у меня есть структура для представления некоторых данных, и она выглядит так:

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 и два байта значения могут вписаться в 32 бита. Что мне интересно, так это (для целей выравнивания, производительности и т. Д.), Если было бы целесообразно хранить эти данные в следующем формате:

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); }
    }
}

Это бессмысленно? Каковы будут преимущества / недостатки?

5
задан Dan Tao 27 August 2010 в 19:40
поделиться