[英]Explain the behaviour of 1-bit bit-fields
#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;
}
Output:
-1 2 2
请解释程序的输出?
bit1
是一个带符号的 1 位 integer,它只能保存值-1
和0
。
想必唯一好奇的 output 是第一个吧。
那么,请考虑 1 位二进制补码integer 可以表示的值的范围。
请注意结构中的以下语句:
int 位 1:1; --> 'int' 表示它是一个带符号的 integer。对于带符号的整数,最左边的位将用作 +/- 符号。 如果在 1 位字段中存储 1: 最左边的位为 1,因此系统会将其值视为负数。
系统使用2的补码方法来处理负值。
因此,存储的数据为1。1的2的补码也为1(负数)。
因此打印 -1。
如果在 4 位字段中存储 2: 二进制 2:0010(最左边的位为 0,因此系统会将其视为正值) 0010 为 2 因此打印 2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.