型の安全性を維持しながら、列挙型を 1 バイト未満に定義したいと思います。
列挙型を次のように定義します。
enum MyEnum : unsigned char
{
i ,j, k, w
};
1 バイトに縮小することはできますが、最大で 4 つの値を使用するため、2 ビットのみを使用するようにしたいと考えています。これはできますか?
列挙型を使用する構造体では、次は機能しません
struct MyStruct
{
MyEnum mEnum : 2; // This will be 4 bytes in size
};
ありがとう!
アップデート:
質問は次のシナリオから来ています。
enum MyEnum : unsigned char
{
i ,j, k, w
};
struct MyStruct
{
union
{
signed int mXa:3;
unsigned int mXb:3;
};
union
{
signed int mYa:3;
unsigned int mYb:3;
};
MyEnum mEnum:2;
};
sizeof(MyStruct) は 9 バイトを示しています。理想的には、構造体のサイズを 1 バイトにしたいと思います。
実装されたソリューションの更新:
この構造体は 1 バイトで、同じ機能とタイプ セーフを提供します。
enum MyEnum :unsigned char
{
i,j,k,w
};
struct MyStruct
{
union
{
struct { MyEnum mEnum:2; char mXa:3; char mXb:3;};
struct { MyEnum mEnum:2; unsigned char mYa:3; unsigned char mYb:3;};
};
};