- 论坛徽章:
- 0
|
我的PC是32位机,小端存储,新手上路欢迎指正:
1. printf("%d\n",sizeof(bitstruct)); = 4
该结构体将一个int(32个bit位)分为 b1 (占5个bit位),匿名段(占2个bit位),b2(占2个bit位)-------去了解下“位域”的概念
所以一个sizeof(struct) 还是一个sizeof(int)的大小。
2. memcpy(&b,"EMC Examination",sizeof(b));
将字符串"EMC Examination"中的sizeof(b)个字符按你PC的“大小端存储”贮存到&b中,也就是说“EMC ”将会存到&b中,这里有个“大小端”的概念。
去查字符“EMC”的ASC||码:E=69 M=77 C=67 space=32,他们的二进制表示为"00100000(space) 01000011(C) 01001101(M) 01000101(E)",并且将按这样的顺序存储到一个int中
3. printf("%d,%d\n",b.b1,b.b2);
b.b1输出的将是“00100000 01000011 01001101 01000101”的前5个bit,即00101,如果要%d输出的话,编译器将把其转化为00000..(27个0)00101,值为5
b.b2输出的将是“00100000 01000011 01001101 01000101”的第8,9位,即10,如果要%d输出的话,编译器将把其转化为11111..(30个1)10,值为-2。
**注意符号位** |
|