解释1位位字段的行为

时间:2012-04-10 18:58:43

标签: c

#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

请解释一下程序的输出?

3 个答案:

答案 0 :(得分:9)

bit1是带符号的1位整数,只能保存值-10

答案 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。