我有一个对应于硬件寄存器的结构。
typedef unsigned int uint32;
typedef union A_u{
uint32 words[4];
struct {
uint32 a : 2;
uint32 b : 3;
uint32 unused : 27;
uint32 c : 2;
uint32 d : 3;
uint32 unused0 : 27;
uint32 unused1 : 1;
uint32 e : 1;
uint32 f : 1;
uint32 g : 1;
uint32 h : 1;
uint32 i : 1;
uint32 unused2 : 26;
uint32 reserved6 : 32;
}s;
}A_t;
main()
{
A_t obj;
uint32 val = 1;
memset(&obj, 0, sizeof(A_t));
//fills data
read_data(&obj);
printf("0x%x\n", obj.words[2]);
printf("obj.s.h = %d\n", obj.s.h);
}
输出是
0x80000000
obj.sh = 1。
虽然第三个单词是 0x80000000,但 obj.sh 显示为 1。我无法理解这一点。我在 powerpc 上运行它,其中第一位字段是最高有效位。