标签:
In little-endian systems, what is the result of following C program ?
#include <stdio.h> typedef struct bitstruct { int b1:5; int :2; int b2:2; } bitstruct; int main() { bitstruct b; memcpy(&b, "EMC EXAMINATION", sizeof(b)); printf("%d, %d\n", b.b1, b.b2); return 0; }
结果:
5, -2
析:
1)x86系列的CPU都是小端的。
2)根据位域的定义知 b 占内存空间的9个bit
3)‘E‘的ASCII值为 0x45其二进制为 0100 0101,‘M‘的ASCII值为 0x4D 其二进制为0100 1011
4)在小端系统中根据高高低低原则(高位字节存放在高地址处,低位字节存放在低地址处),b 中位域b1 存放在内存低地址处,
b2存放在内存的高地址处。
5)内存分布
一个字节的低bit 放在内存的低bit地址处,假设在32位系统中:
0x00001000 | bit0 | 1 |
0x00001000 | bit1 | 0 |
0x00001000 | bit2 | 1 |
0x00001000 | bit3 | 0 |
0x00001000 | bit4 | 0 |
0x00001000 | bit5 | 0 |
0x00001000 | bit6 | 1 |
0x00001000 | bit7 | 0 |
0x00001001 | bit8 | 1 |
b1 使用 bit0 ~ bit4
bit5 ~ bit6 空出
b2 使用 bit7 bit8
这样
b1 的二进制值为: bit4 bit3 bit2 bit1 bit 0 -> 00101 -> 5
b2 的二进制值为: bit8 bit7 -> 10 -> 有符号数转补码表示 10 -> -2
标签:
原文地址:http://www.cnblogs.com/aqing1987/p/4328413.html