7
#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

请解释程序的输出?

4

3 回答 3

9

bit1是一个有符号的 1 位整数,它只能保存-10

于 2012-04-10T19:01:33.097 回答
8

大概唯一奇怪的输出是第一个。

好吧,考虑一下 1 位二进制补码整数可以表示的值的范围。

于 2012-04-10T19:01:12.080 回答
2

请注意结构中的以下语句:

诠释位1:1;--> 'int' 表示它是一个有符号整数。对于有符号整数,最左边的位将用作 +/- 符号。如果将 1 存储在 1 位字段中:最左边的位为 1,因此系统会将值视为负数。

系统使用 2 的补码方法来处理负值。

因此,存储的数据为 1。1 的 2 的补码也是 1(负数)。

因此 -1 被打印出来。

如果将 2 存储在 4 位字段中: 二进制 2:0010(最左边的位为 0,因此系统将其视为正值) 0010 为 2 因此打印 2。

于 2012-10-03T10:04:39.947 回答