(首先说一下计算机只存储二进制数据的原因,因为计算机由逻辑电路组成,而逻辑电路通常只有两种状态,即开关的接通与断开,刚好可以表示成‘1’和‘0’。另外,计算机为了设计简单,只设计了加数寄存器,通过补码的形式可以将减法转换为加法,计算机只能进行加法操作)。
原码:数的最原始的二进制编码。
例:
120的原码为0111 1000(最高位为符号位,0表示正数,1表示负数)
-23的原码为1001 0111
-0的原码为1000 0000(原码中,0有两种表示方法)
+0的原码为0000 0000
-1的原码为1000 0001
+1的原码为0000 0001
如果在计算机中存储的原码,在计算1+(-1)时,运算步骤如下:
1+(-1)的正确结果应该为0,而用原码存储时,得到的结果为-2。
如果计算机中存储数据使用原码,则会导致两个问题,1.有负数参与的运算结果不正确。2.0的表示方法有两种。
反码
正数的反码为其本身,负数的反码为符号位不变,其他位取反。
-0的反码为1111 1111(-0的原码为1000 0000,符号位1不变,其它位取反)
+0的反码为0000 0000
-1的反码为1111 1110
+1的反码为0000 0001
使用反码存储时,计算1+(-1)= 1111 1111。得到的结果为-0 。
虽然使用反码存储能够解决有负数参与运算的问题,但0的存储形式仍然有两种。
补码
正数的补码为其本身,负数的补码等于反码加1。
-0: 0000 0000(-0的反码为1111 1111,加1,变为1 0000 0000,高位溢出)
+0:0000 0000
-1:1111 1111
+1:0000 0001
当使用补码存储数据时1+(-1)=1 0000 0000,高位溢出,即得到的结果为0000 0000 = 0,运算得到的结果正确,并且0的存储形式只有一种,即0000 0000。因此,计算机中使用补码存储数据。
补码转原码
方法1:
第一步:符号位不变,其他位取反。
第二步:加1。
方法2:(该方法使用的较少)
第一步: 减1。
第二步:符号位不变,其他位取反。