0xfb-0xfa
我必须先转成二进制
0xfb=11111011
0xfa=11111010
-0xfa=00000101+1=00000110
现在11111011+00000110=100000001
这是下溢,但它显然是不正确,在哪里我弄错了吗?
目前尚不清楚最初的数是否带符号。其结果将是相同的,但理由是略有不同。
假设您最初的数字是无符号,初始转换是不正确。在二进制编码为无符号时,您的数据是8位。如果你想将它们转换为二进制补而不截断,你需要一个额外的位。所以
+0xfb = 0 11111011
+0xfa = 0 11111010
-0xfa = 1 00000110
现在,我们可以计算出除
(1)
0xfb 0 11111011
-0xfa + 1 00000110
----------
0 00000001
我们可以看到,没有溢出。有一个进行,但我们可以忽略它的二进制补码。和一正一反数的总和不能溢出。
现在,作为这两个MSB是相等的,结果可缩短为8位给出1的明显的结果。
如果最初的数字签名的,大部分的计算是正确的。所有的操作都可以在8位来完成。其结果将是8位。
(1)
0xfb 11111011
-0xfa + 00000110
----------
00000001
有一个进,但没有超过或下溢。其结果是正确的。