减去两个补数

时间:2014-09-06 10:06:49

标签: c++ c binary

我已经读过要在两个补码编码中减去两个数字,我们只是将它们加在一起。所以为什么在汇编语言中有两个补码的 sub 指令,必须只有一个无符号数。

5 - 7这样的表达式以这种方式计算:??

-7 - > unsigned rep - > 0111 - >两个补充 - > 1001 然后计算机做 - > 0101 + 1001 = 1110 = -2 ??

2 个答案:

答案 0 :(得分:2)

以下是补充的工作原理。

考虑数字-1234。

我们将4位数字表示为

   10000
-   1234

等于

    9999     + 1
-   1234
________
    8765     + 1

其中8765是 9的补码(在十进制中)1234,而8765 + 1 = 8766是 10的补码(在十进制系统中)。 / p>

要计算5555 - 1234,您只需执行10000 + 5555 - 1234 = 5555 + 8766.计算完之后,再次减去10000。这就像忽略第五位一样简单。

您刚刚通过添加10的补码来计算减法1234。


二进制2的补码形式表示的减法运算通过(1)计算2的补码,以及(2)加法 - 这与仅添加不同。

答案 1 :(得分:1)

原帖是正确的。在典型的二进制补码计算机上,无论数字是有符号还是无符号,实际的减法运算都会产生相同的结果,因此实际的减法运算可以采用无符号数,但它设置两个不同的条件位,设置或清除“借位”位假设数字是无符号的,并设置或清除“溢出”位,假设数字已签名。

有些处理器使用实际的减法硬件逻辑,而不是使用否定和添加。