int a=1;
// a=1 in binary representation 0000 0000 0000 0000 0000 0000 0000 0001
int b =~a; 1111 1111 1111 1111 1111 1111 1111 1110
printf("%d",b)
输出= -2。
为什么输出为-2
32位 - 0-31。
第31位是有符号位。如果no为+ ve,则为bit = 0;如果为no,则为1,
由于1已移至第31位。如果signed bit是1则不是-ve。那为什么值2
我的理解是否正确。如果没有指导我
答案 0 :(得分:3)
如何计算two's complement?
首先我们翻转所有位,然后我们在结果中加1。这样做你会得到2,但由于MSB是1,结果是否定的:
~00000001
为11111110
,翻转,您将获得00000001
,现在添加1:00000010
答案 1 :(得分:0)
负数通过按位否定并添加一个
来构建这是两个补充。
如果补码将用于表示neg数,那么零将具有两个表示并且它将使计算复杂化。如果数据被解释为有符号或无符号,那么只需使用正常(至少是最多)无符号运算而无需关心