#include<stdio.h>
int main()
{
struct value{
int bit1 : 1;
int bit3 : 4;
int bit4 : 4;
}bit={1,2,2};
printf("%d %d %d\n",bit.bit1,bit.bit3,bit.bit4);
return 0;
}
输出:
-1 2 2
请解释一下程序的输出?
答案 0 :(得分:9)
bit1
是带符号的1位整数,只能保存值-1
和0
。
答案 1 :(得分:8)
据推测,唯一好奇的输出是第一个。
好吧,考虑1位two's-complement整数可以表示的值范围。
答案 2 :(得分:2)
请注意以下声明 结构:
int bit1:1; - &GT; 'int'表示 它是一个SIGNED整数。 对于有符号整数,最左边的位将用于+/-符号。 如果在1位字段中存储1: 最左边的位是1,所以 系统会将价值视为 负数。
2的补码方法是 由系统用来处理 负值。
因此,存储的数据为1。 1的2的补码也是1 (负)。
因此打印-1。
如果在4位字段中存储2: 二进制2:0010(最左边的位是0, 因此系统将其视为正值)0010为2 因此打印2。