誰もがアサートに失敗した理由を教えてください。ユニフォームでビットフィールドが正常に動作しない
参考:64ビットLinuxマシンでgcc 4.6.1を使用してこれをコンパイルします。
typedef union cpu_register {
uint64 _64;
uint32 _32;
uint16 _16;
uint16 _8l : 8,
_8h : 8;
} __attribute__((packed)) cpu_register;
int main()
{
cpu_register reg;
reg._64 = 1;
assert(reg._8h != reg._8l);
return 0;
}
reg._8hに期待される値は0ですが、reg._8l(== 1)の値と同じです。
私はこの問題を克服するための解決策を得ましたが、何が間違っているかを知りたいですか?
あなたの質問に言語タグ(C?)を追加してください。あなたの質問を見つけて正しい解決策を提供するのに役立ちます。 – aKzenT
ええ、そのC言語、申し訳ありません、それは私の最初の投稿だったので、私はそれを逃した。 – user1314006