#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
请解释程序的输出?
#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
请解释程序的输出?
bit1
是一个有符号的 1 位整数,它只能保存-1
值0
。
大概唯一奇怪的输出是第一个。
好吧,考虑一下 1 位二进制补码整数可以表示的值的范围。
请注意结构中的以下语句:
诠释位1:1;--> 'int' 表示它是一个有符号整数。对于有符号整数,最左边的位将用作 +/- 符号。如果将 1 存储在 1 位字段中:最左边的位为 1,因此系统会将值视为负数。
系统使用 2 的补码方法来处理负值。
因此,存储的数据为 1。1 的 2 的补码也是 1(负数)。
因此 -1 被打印出来。
如果将 2 存储在 4 位字段中: 二进制 2:0010(最左边的位为 0,因此系统将其视为正值) 0010 为 2 因此打印 2。