2的补语错误

时间:2015-12-24 17:57:34

标签: binary subtraction twos-complement

我通常理解2的补码的概念。当将一个值转换为2的补码进行减法时,只需将该数字的每个数字否定得到1的补码并加1.当计算二进制中2-2的结果时,首先将-2转换为2的补码,(我喜欢使用4位表示)0010变为1101然后变为1110.然后你评估0010 + 1110并获得0000并且溢出的1被截断。

然而,像2-3这样的问题呢?所以我做了同样的操作。 2是0010并且3(0011)的2的补码是1101.因此0010 + 1101导致1111并且没有溢出。结果是15. 15不是负面的1.我是否错过了关于2补码如何运作的关键点,其他网站和消息来源忽略了?

3 个答案:

答案 0 :(得分:0)

在2的赞美中1111是-1(如果你当然只有4位)

从1111到其绝对值反转:

0000

并添加1

0001

答案 1 :(得分:0)

请记住,您正在进行签名算术。

在有符号算术中,最高位位置或最左位置的1表示( - )符号。

所以1111是负数。

1111翻转为0000,加1为0001。

所以答案有1级和符号( - )。

2-3 = -1

答案 2 :(得分:0)

当您以二进制补码计算时,结果将始终作为二进制补码处理。如上所述,结果是带符号的二进制补码为-1,或者15为无符号无符号。

你必须注意的是,如果你用正数进行减法而结果是负数,你将溢出。但如果结果是肯定的,则溢出。

这是合乎逻辑的:如果结果为正,则必须小于原始值。添加导致较小值的唯一方法是溢出。当结果为负时,当处理为无符号时,它将始终大于原始值(MSB将为1,而原始值为0)并且没有溢出。