所有程序最后都会变成一串0和1的二进制机器数,第一位位作为符号位,0代表正数,1代表负数。计算机并不能识别进位,那它是如何处理加减法的呢。这就涉及到计算机的原码、反码和补码了。
一、原码、反码、补码的概念
1、原码
原码是最容易理解被记住的表示,就是第一位为符号位,其余位为真值
例:
[+1]原 = 00000001
[-1]原 = 10000001
2、反码
正数的反码就是其原码,负数的反码就是在原码的基础上符号位不变,其余位取反
例:
[+1]反 = 00000001
[-1]反 = 11111110
3、补码
正数的补码就是其本身,负数的补码就是在反码的基础上+1
例:
[+1]补 = 00000001
[-1]反 = 11111111
二、计算方法
计算机在计算时如果用原码计算:1+1好像没有问题
00000001[原]
+00000001[原]
=00000010[原]=2
但计算减法如1-1(即1+(-1))得到的结果却为-2,显然不合理
00000001[原]
+10000001[原]
=10000010[原]=-2
于是就出现了反码解决了减法问题,如1-2即1+(-2)
00000001[反]
+11111101[反]
=11111110[反]=10000001[原]=-1
但是反码表示也有不合理的地方,例如当结果为0的时候:1-1
00000001[反]
+11111110[反]
=11111111[反]=10000000[原]=-0
这时候就会出现+0和-0两种0的表示,为了解决这一尴尬就又出现了补码例:1-1结果为0就只有一种表示
00000001[补]
+11111111[补]
=00000000[补]=00000000[原]=0