主要讲解计算机的原码、反码、补码,如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!
下面的原码、反码、补码的存储主要是解决两下问题:
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、在计算机运算的时候,都是以补码的方式来运算的