在小端计算机中下面程序的输出
typedef struct bitstruct
{
int b1:5;
int :2;
int b2:2;
} bitstruct;
void main()
{
bitstruct b;
memcpy(&b, "EMC EXAMINATION", sizeof(b));
printf("%d,\n", sizeof(b)); //输出4
printf("%d, %d\n", b.b1, b.b2); //输出5,-2
}
解析:
内存分布
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
…… |
E |
M | |||||||||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
…… |
0~4为b1,
5,6匿名,
位域不能跨字节,第7位不用,
8、9位为b2;
但是在小端计算机中,位域也是与人的思维相反所以
b1: 00101 = 5;
b2:10 最高位为1表示负数,此数是-2的补码