原码、反码、补码和移码

         各种数值在计算机中表示的形式为机器数,其特点是采用二进制计数制,数的符号用0或1表示,小数点则隐含,表示不占位置,这就是机器数的原码。为了便于运算,带符号的机器数可采用原码、反码、补码和移码等不同的编码方法,机器数的这些编码方法称为码制。在这种表示方法中,最高为是符号位,0表示正号,1表示负号。

原码就能够表示一个二进制数了,为什么要使用不同的编码方法(反码,补码)?

有了数值的表示方法就可以对数值进行算数运算。

下面,我们先区分一下机器数和真值:

机器数:一个数在计算机中的二进制表示形式,如00001。

真值:除符号位,一个二进制数所表示的值。0000 0001的真值=+0000 0001=+1;1000 0001的真值=-0000 0001=-1而不是129

根据运算法则,减去一个正数等于加上一个负数,即1-1=1+(-1)=0

 (1)10 = (1)10 + (-1)10 = (0)10=0

十进制的1减十进制的1等于十进制的1加十进制的-1等于十进制的0,也就是0

原码:

(0000 0001)原+(1000 0001)原 = (1000 0010)原 = (-2) 与上面计算结果不同

当用原码计算时,让符号位也参与运算,显然,结果是错误的。

反码:

(0000 0001) 反+(1111 1110)反 = (1111 1111)反 = (1000 0000)原=(-0) 与上面j计算结果不同

我们发现,当用反码计算时,结果的真值部分是正确的,但是出现了-0的情况,在人们的意识里,+0和-0是一样的,但是0带符号是没有意义的,还会出现(0000 0000)和(1000 0000)两种表示方式。

因此,反码解决了负数加法运算的问题,将减法运算转换为加法运算,从而简化运算规则。

补码:

(0000 0001)补+(1111 1111)补=(0000 0000)补=(0000 0000)原=0与上面计算结果相同

使用补码, 修复了0的符号以及存在两个表示0的编码的问题,弥补了反码的不足。

移码:

移码是符号位取反的补码,一般用zhi'指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零全为0(小编表示完全不知道这是说了点啥,有明白的大神可以在评论中多多指教哦!)

原码、反码、补码和移码存在的差别?

我们以十进制数+45和-45,机器字长为8举例:

             +45                                         -45

原码00101101                            10101101

正数原码=其二进制数               负数原码=其二进制数符号位取反

反码00101101                            11010010

正数反码=原码                           负数反码=原码除符号位均取反

补码00101101                            11010011

正数补码=原码                           负数补码=反码+1

移码00101101                             01010011

正数移码=原码                           负数补码=补码符号位取反

总结:

1.正数的原码、补码、反码、移码均为其二进制数

2.负数的原码、反码、补码、移码转换公式:

反码=原码(除符号位外)均取反

补码=反码+1

反码=补码-1

移码=补码符号位取反

        当时软考学习这部分内容的时候,只考虑了原码、反码、补码、移码之间的相互转化,没想过为什么要有这么多的编码方式,今天查了下资料,花了一下午的时间研究,有了一点点成果。没有无缘无故存在的事物,任何东西存在都是有他的价值的,懂得了这些,以后在学习其他东西的时候也可以问一问自己,为什么要有这个东西呢?不能为了学习而学习,而是有自己的思考,这样我们将会学到更多的知识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值