#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct AA {
int a1:5;
int a2:2;
} AA;
int main() {
AA aa;
char cc[100];
strcpy(cc, "0123456789");
memcpy(&aa, cc, sizeof(AA));
printf("%d\n", aa.a1);
printf("%d\n", aa.a2);
return 0;
}
我的意思是我知道sizeof(AA)
sizeof(int)
等于4
字节,将"0123"
复制到aa
之后,二进制数是
00110011,00110010,00110001,00110000
3 2 1 0
但我不明白哪些位是a1:5
或a2:2
?
答案 0 :(得分:3)
位域的排列不规范。
根据您的搜索结果,a1
暂停10000
,a2
暂停01
。可能出现的一种方法是,a1
是cc[0]
的最低5位,而a2
是下一个最低2位。
也就是说,cc[0]
为00110000
,其被划分为0 01 10000
。
如果您对值进行了更多实验,您可以确定编译器正在使用哪个顺序。