计算机存储都是以补码的形式存储的。原因是简化计算机的基本运算电路,使加减法都可以用加法来进行运算。
整数:
原码:
原码就是一个数的二进制形式,只不过最高位是用来表示符号位。
例:+1 = 0000 0001(原码),-1 = 1000 0001(原码);
反码:
正数的原码,反码,补码 是相同的,就是原码的形式。
负数的反码等于其原码除符号位以外相反(0变1,1变0)
例:+1 = 0000 0001(原码) = 0000 0001(反码) = 0000 0001(补码)
-1 = 1000 0001(原码) = 1111 1110(反码)
补码:
计算机储存数字用的码就是补码;
正数的原码,反码,补码 是相同的,就是原码的形式。
负数的补码等于反码加一;
例:+1 = 0000 0001(原码) = 0000 0001(反码) = 0000 0001(补码)
-1 = 1000 0001(原码) = 1111 1110(反码) = 1111 1111 (补码)
计算机是怎么把减法和加法一起变成加法计算,我是这样理解的:
对于 1111 1111 (-1)来说 它 加上0000 0001 (1)和 减去1111 1111 (-1)的结果都是 0000 0000,所以在这里减去1111 1111 (-1)和加上 0000 0001(1) 的效果是一样的,因此计算机在做减去1111 1111(-1) 的运算时,就会直接加上0000 0001(1)(也就是 1111 1111(-1) 的补码);同理减去1111 1110 和加上 0000 0010等等都是一样的。
两个补码相加时,如果最高位(符号位)有进位,则进位直接舍去。