因为cup只能计算加法,所以为了省时省力地计算如1-1的减法运算,科学家们发明了补码。
先来看看源码是如何变成补码的,定义一个整型a
int a = 10;
它在计算机中源码、反码、补码都相同,为:
00000000000000000000000000001010
运行代码,开始调试,16进制形式为:
0a000000
完整代码如下
到了负数却会有很大的变化,定义一个整型b
int b = -10
先取源码:
10000000000000000000000000001010
再取反码:
11111111111111111111111111110101
加一变成补码:
11111111111111111111111111110110
则对应的16进制为:
f6ffffff
运行代码,开始调试,结果及代码如下:
这样有一个好处,比如要计算10-10,如果都是源码会出现这种情况
00000000000000000000000000001010 + 10000000000000000000000000001010=
10000000000000000000000000010100
转换为10进制为-20,结果明显不对。
但是用补码进行运算能得出正确的结果
00000000000000000000000000001010 + 11111111111111111111111111110110 =
00000000000000000000000000000000
结果为零,完美。