原码表示有符号数的加法:
如果用加法实现最终结果是错误的(加法器直接对原码进行加法运算) >>> 10011100
而换用减法实现就会是正确的答案 >>>> 00000000
理由 :原码的加数和被加数分别可能出现正数负数两种情况,也就是一共出现四种情况
解决方法:
1.原码的加法
2.原码的减法
举例:
注意: 真值都是原码表示出来的
计算是用补码进行计算的
如果最后得出
1,0001011 >> 负数 >>负数的补码的真值是:从右往左数第一个1为分界线,除符号位以外全部取反
>>1,1110101>>除符号位>>64+32+16+4+1==117 >> -117
如果最后得出
0,1101100 >> 正数 >>补码等于原码 >> 64+32+8+4==108 >>+108
计算机硬件处理溢出
为什么说正数+正数 会出现上溢呢?
例如:2+2==4 >> 010+010 >>100 >>对应的是-4
例如 3+3 == 011 + 011 == 110 >> 对应的是 -2
如何判断是什么溢出呢?
方法一:
在 [A+C] 的补码运算中,A的符号位是0, C的符号位是 0 ,最终结果的符号位是1
所以对应代入V 的表达式中判断是1 >>> 有溢出