0xfb-0xfa我首先转到二进制
0xfb=11111011
0xfa=11111010
-0xfa=00000101+1=00000110现在11111011+00000110=100000001是下溢的,但它肯定是不正确的,我哪里弄错了?
发布于 2019-02-05 05:46:44
目前还不清楚最初的数字是有符号的还是无符号的。结果将是相同的,但推理略有不同。
假设您的初始数字是无符号的,则初始转换是不正确的。当以二进制编码为无符号时,您的数据是8位。如果你想在不截断的情况下将它们转换成2补码,你需要额外的比特。所以
+0xfb = 0 11111011
+0xfa = 0 11111010
-0xfa = 1 00000110现在我们可以计算加法了
(1)
0xfb 0 11111011
-0xfa + 1 00000110
----------
0 00000001 我们可以注意到没有溢出。有一个进位,但我们可以在2s补码中忽略它。并且正数和负数的和不能溢出。
现在,由于两个MSB相等,结果可以缩短为8位,从而得到明显的结果1。
如果初始数字是有符号的,那么你的计算大部分是正确的。所有的运算都可以在8位上完成。结果将在8位上。
(1)
0xfb 11111011
-0xfa + 00000110
----------
00000001 有进位,但没有溢出或下溢。结果是正确的。
https://stackoverflow.com/questions/54523694
复制相似问题