jiayaowei

 

原码、反码、补码学习总结

原码反码补码的定义

原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负

反码:正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反

补码:正数的补码是其本身,负数的补码是在其反码的基础上1

原码

比如12的二进制就是00001100,其中每个0或1叫做一个比特位(bit),8个bit为一组称作字节。

不难看出,原码的最大值是01111111,及十进制的127,最小值是11111111,及-127。

利用原码对正数进行计算是不会有问题的 。

但是在对负数进行运算时会有一些弊端。

原码的弊端

在对10000000进行加一运算时,-0+1结果应该是1,但是原码的结果是10000001也就是-1,再加一,-1+1的结果应该是0,但是原码却是10000010也就是-2。

所以,如果是负数计算,结果就会出错,实际运算的结果,跟我们预期的结果是相反的。

反码

为了解决原码不能计算呢负数的问题而出现了反码。

计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。

例:-12的原码是10001100反码是11110011,-12+1=-11,11110011+1=11110100,再转化为原码就是10001011也就是-11

反码的不足

-0的原码是10000000,对其反码(11111111)加一得到00000000按照规则,00000000的原码还是00000000也就是十进制数字的0,-0+1=0是显然不对的

反码计算时,跨零会出现误差1,所以有了补码

补码

为了除掉误差,规定正数的补码不变,负数的补码在反码的基础上加一

误差消除了,但是因为补码是在反码的基础上加一所以-127的补码变成了10000001,空出来了一个10000000,于是规定10000000表示十进制的-128,-128没有原码和反码

所以一个字节的存储范围是-128到127

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

posted on 2022-09-12 11:40  佳肴味  阅读(568)  评论(0编辑  收藏  举报

导航