原码

十进制的数据转换为二进制的表现形式就是原码,最左边表示符号位,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

补码注意点

计算机中的存储和计算都是以补码的形式进行的