次のコード:
void f3()
{
enum AeF3
{
f3E1 = 1,
f3E2,
f3E3,
};
struct AsF3
{
AeF3 e1:2, e2:2, e3:2;
};
AsF3 inst;
inst.e1 = f3E1;
inst.e2 = f3E2;
inst.e3 = f3E3;
cout << "inst.e1 is " << ((inst.e1 == f3E1) ? "" : "not ") << "equal to f3E1" << endl;
cout << "inst.e2 is " << ((inst.e2 == f3E2) ? "" : "not ") << "equal to f3E2" << endl;
cout << "inst.e3 is " << ((inst.e3 == f3E3) ? "" : "not ") << "equal to f3E3" << endl;
}
次の出力が生成されます。
inst.e1 is equal to f3E1
inst.e2 is not equal to f3E2
inst.e3 is not equal to f3E3
キャストなしでこのエラーを修正するにはどうすればよいですか?
詳細説明
e2 と e3 は、符号のために 1 ビットを保存する必要があるため、1 より大きい値を保持できません。このビットを符号に使用せず、代わりに値に使用するようにコンパイラに指示する方法が必要です。私は試した:
enum AeF3 : byte
しかし、それは役に立ちません。-2 の代わりに 254 が比較されますが、2 は -2 にも 254 にも等しくありません。