原码
十进制的数据转换为二进制的表现形式就是原码,最左边表示符号位,0为正,1为负
原码计算
十进制40转为2进制为00101000,00101000就是原码,数据第一位表示符号位,后面表示具体数据,
二进制中的一个0或者1表示一个bit,8个bit为一个字节,字节是计算机中最小的存储单元,所以一个字节
最大表示的是01111111,最小表示为11111111
原码的弊端
使用原码计算时,如果是正数,完全没有问题,但是使用负数计算结果是错误的,是和我们的预期计算结果相反
原码的弊端解析
在计算正数原码从00000000(表示+0开始)开始加1是在上面+1就好,如1表示00000001,在+1为2,00000010............,正数加1使用原码计算没有问题
那我们在试下计算负数的时候原码10000000(-0),在其上+1,原码表示为10000001,其结果表示为-1,但是我们0+1应该为1才对,我们在以-1原码10000001基础上+1表示为10000010,此时结果为-2,但是我们-1+1应该为0,如果使用原码进行负数计算,计算结果是错误的
为什么出现反码
为了解决原码不可以计算负数问题
反码规则
正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0
反码负数计算
使用反码计算负数运算:如-2的原码是10000010反码为11111101,然后使用反码加1
得到反码是11111110,然后转换为原码为10000001,就是-1的原码编写形式
反码弊端
负数计算时,在不跨0使用负数反码计算是没有问题的,但是跨0使用反码计算,会跟实际的结果偏差1
反码弊端解析
十进制数字  | 原码  | 反码  | 
+0  | 00000000  | 00000000  | 
-0  | 10000000  | 11111111  | 
-1  | 10000001  | 11111110  | 
-2  | 10000010  | 
 11111101  | 
-3  | 10000011  | 11111100  | 
-4  | 10000100  | 11111011  | 
使用上面表格反码依次从-4加1,当加到-0时,反码11111111 ,在反码上+1,变为00000000,在反码中表现0的方式有二种,所以在反码跨0计算的时候会出现问题,跨0计算如:-1+2反码计算11111110+00000010=0000000,在计算时就会相差1
为什么出现补码
解决反码在跨0计算出现相差1的问题
补码规则
在反码的基础上加1,将-0下面的错一位作为补码
十进制数字  | 原码  | 反码  | 补码  | 
+0  | 00000000  | 00000000  | 00000000  | 
-0  | 10000000  | 11111111  | 00000000  | 
-1  | 10000001  | 11111110  | 11111111  | 
-2  | 10000010  | 11111101  | 11111110  | 
-3  | 10000011  | 11111100  | 11111101  | 
-4  | 10000100  | 11111011  | 11111100  | 
…  | …  | …  | …  | 
-126  | 11111110  | 10000001  | 10000010  | 
-127  | 11111111  | 10000000  | 10000001  | 
-128  | 无  | 无  | 10000000  | 
补码跨0计算
-1+2补码相加11111111+00000010=00000001,就解决跨0问题,然后补码就空出以为10000000,然后把空出的这一位变为的-128
补码注意点
计算机中的存储和计算都是以补码的形式进行的










