繁体   English   中英

解释 1 位位域的行为

[英]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,它只能保存值-10

想必唯一好奇的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM