我已经读过要在两个补码编码中减去两个数字,我们只是将它们加在一起。所以为什么在汇编语言中有两个补码的 sub 指令,必须只有一个无符号数。
像5 - 7
这样的表达式以这种方式计算:??
-7 - > unsigned rep - > 0111 - >两个补充 - > 1001 然后计算机做 - > 0101 + 1001 = 1110 = -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)
原帖是正确的。在典型的二进制补码计算机上,无论数字是有符号还是无符号,实际的减法运算都会产生相同的结果,因此实际的减法运算可以采用无符号数,但它设置两个不同的条件位,设置或清除“借位”位假设数字是无符号的,并设置或清除“溢出”位,假设数字已签名。
有些处理器使用实际的减法硬件逻辑,而不是使用否定和添加。