在结构中使用int和int

Raj*_*yan 6 c struct

   #include<stdio.h>
   struct a
   {
      int a:4;
   };
   main(){
   struct a aa;
   aa.a=9;
   printf("a=%d\n",aa.a);
   return 0;
   }
Run Code Online (Sandbox Code Playgroud)

输出为-7.为什么会这样?究竟是什么?a:4呢?请解释

Ste*_* P. 5

由于它是两个补码,因此最高位用于符号.通过写a:4你只说分配4位内存,剩下3位留给实际数字.所以我们的有效范围是[-8,7].由于所有1都是-1,所以在负面有一个额外的数字.有关此问题的更多解释,请参阅上面的链接.

9,in(无符号)二进制是:1001.当你把它放入a(签名)时,a由于最初的1 ,你得到的是负数,并且由于以下数字是001,我们将最大负数加1,从而给出-7.

如果你想只用4位存储数字9,你需要使用一个unsigned int,这将给你一个范围[0, 15].

编辑:
如果有人在努力弄清楚1001签名如何给我们-7,请考虑以下事项:

因为1111是-1,所以让一些变量value = -1.

为了弄清楚负的值(签字)int num,让我们表示X num:

x i:{0,1在位置i,其中i = 0是最低有效位}},

然后,对于每个x i = 0,从中减去2 ivalue.

例:

1001:

value= -1 - 2 1 - 2 2 = -7