Könnte mir bitte jemand sagen, warum ist die Assert fehlgeschlagen?bitfields funktioniert nicht wie erwartet in einer Union
FYI: Ich kompiliere dies mit gcc 4.6.1 auf einem 64-Bit-Linux-Rechner.
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;
}
Der Wert für reg._8h erwarten ist 0, aber es ist gleich der reg._8l (== 1).
Ich habe eine Lösung, um dieses Problem zu überwinden, aber ich möchte wissen, was los ist?
Bitte fügen Sie Ihrer Frage ein Sprach-Tag (C?) Hinzu, es wird Menschen helfen, Ihre Frage zu finden und die richtige Lösung zu bieten. – aKzenT
yup seine C-Sprache, tut mir leid, es war mein erster Beitrag, also habe ich es verpasst. – user1314006