补充32位数据

时间:2014-03-13 14:21:48

标签: c

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

我的理解是否正确。如果没有指导我

2 个答案:

答案 0 :(得分:3)

如何计算two's complement

首先我们翻转所有位,然后我们在结果中加1。这样做你会得到2,但由于MSB是1,结果是否定的:

~0000000111111110,翻转,您将获得00000001,现在添加1:00000010

答案 1 :(得分:0)

负数通过按位否定并添加一个

来构建

这是两个补充。

如果补码将用于表示neg数,那么零将具有两个表示并且它将使计算复杂化。如果数据被解释为有符号或无符号,那么只需使用正常(至少是最多)无符号运算而无需关心