#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呢?请解释
由于它是两个补码,因此最高位用于符号.通过写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
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |