代码如下:
#include <stdio.h>
struct bit {
int a:3;
int b:2;
int c:3;
};
int main(int argc, char *argv[])
{
struct bit s;
char *c = (char *)&s;
*c = 0x99;
printf("s.a: %d; s.b: %d; s.c: %d\n", s.a, s.b, s.c);
return 0;
}
0x99的二进制编码是 1001 1001
,
我认为的结果是这样:
按照struct bit各域的位数, s.a 占3位, 应该是 100
, s.b 占两位,是 11
, s.c占3位,是 001
.
但答案中 s.a 是 001
, s.b 是 11
, s.c 是 100
,和我想的顺序相反。
输出结果也和答案一致:
s.a: 1; s.b: -1; s.c: -4
请教一下,为什么是这样呢?
这个问题其实没什么意义, 按照 C Programming Language 的说法:
对于楼主的问题, a,b,c那个字段在前面 是和具体的实现相关的.