开启历程

原码、反码、补码
2018-01-05 13:48:00   base

      主要讲解计算机的原码、反码、补码,如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!

下面的原码、反码、补码的存储主要是解决两下问题:
1、为了解决负数
2、计算机只会加不会减

### 原码 - 原始的二进制

1、数字分为正负数
2、左边为高位,右边为低位
3、最高位为符号位:0代表为正数,1代表为负数

+1 :0000 0001
- 1 :1000 0001

原码存储导致了2个问题:

1、0有两种存储方式
+0 :0000 0000
- 0 :1000 0000

2、正数和负数相加,结果不正确(因为计算机只会加不会减)
1-1=1+-1
+1 :  0000 0001
- 1 :  1000 0001
相加 :1000 0010   结果是:-2

### 反码 - 为了计算 ·补码·用的

1、正数的原码和反码是一样的
2、先求原码
3、负数在原码基础上,符号位不变,其它位取反( 0为1,1为0)

+1 :0000 0001
- 1 :1000 0001
上面是原码,下面是反码
+1 :0000 0001
- 1 :1111 1110

反码存储导致了2个问题:

1、0有两种存储方式
+0 :0000 0000
- 0 :1111 1111

2、正数和负数相加,结果不正确(因为计算机只会加不会减)
1-1=1+-1
+1 :  0000 0001
- 1 :  1111 1110
相加 :1111 1111   结果是:-0

### 补码 - 在计算机系统中,数值一律用补码来存储(为了解决负数的存储)

1、正数的原码、反码、补码是一样的
2、先得到反码
3、负数反码符号位不动,其他位求反,最后整个数加 1 ,得到补码(也就是反码加 1)

原码
+1 :0000 0001
- 1 :1000 0001
反码
+1 :0000 0001
- 1 :1111 1110
补码
+1 :0000 0001
- 1 :1111 1111
做下减法:1-1=1+-1
+1 :  0000 0001
- 1 :  1111 1111
相加 :1 0000 0000   结果是:0 (因为一个字节等于八个比特,最高位会被丢弃的)

最后二点注意:

1、十进制是以用户(人)角度来存储的-用的是原码
2、二、八、十六进制是以计算机角度来存储的-用的是补码

总结:

1、二进制的最高位是符号位:0表示正数 1表示负数

2、正数的原码、反码、补码都一样

3、负数的反码等于它的原码符号位不变,其它位取反

4、负数的补码等于它的反码+1

5、零的反码、补码都是0

6、在计算机运算的时候,都是以补码的方式来运算的

鲁ICP备17035054号-1