二进制的原码、反码、补码

本文介绍了二进制中的原码、反码和补码概念,用于表示带符号的二进制数。原码直接用最高位表示正负,反码则是负数的数值部分取反,补码则在反码基础上最低位加1,避免进位问题。文章通过实例展示了这些编码在计算过程中的应用,并提到了变形码作为溢出判断的辅助手段。
摘要由CSDN通过智能技术生成

我们知道数字是带符号的,在十进制里面有-10和10.在二进制里面也有,不过我们的符号也需要使用二进制来表示。毕竟计算机通过电流来表示0和1,那么我们的语言里面的符号“+”和“-”也需要转换成计算机认识的语言。

通常在二进制高位第一位”0“代表的是“+”,“1”代表的是“-”

接下来我想分享的是二进制的原码、反码、补码。他们在运算时有着不同的作用。

 

原码

原码,就是我刚刚说的,在二进制数之前,加上0或1。高位第一位”0“代表的是“+”,“1”代表的是“-”。

例如:十进制8的二进制是1000,原码为01000,-8的原码表示为11000。这样我们就可以辨认8的正负情况。对于小数也一样,比如0.1011,如果是正数,就用0.1011,如果是负数,1.1011。

用原码表示,有点在于直观与利于转换。但是有着不可避免的缺点:计算不方便,因为用数字代表正负,计算时我们需要判断符号带来的计算情况。在这种情况下,反码和补码就发挥了它易于计算的优点。这样可以简化逻辑电路。

反码

对于反码和补码,我们的注意力都要放在负数上面,因为是负数给我们带来计算不方便的情况(我个人理解)。反码符号也是用“1”表示。但是它的数值需要取反,这是它的名字由来。

例如:

十进制-8的原码是11000,反码是10111

十进制8的原码是01000,反码是01000

十进制-10的原码是11010,反码是10101

十进制10的原码是01010,反码是01010

用反码表示的话,我们如何运算呢?两数的反码的和等于两数和的反码,符号位也需要参与计算。不知道小伙伴们是否和我一样有一个疑问呢?如果进位的怎么办?

当符号位产生进位时,也需要参与循环进位:进位加到和的最低位上

我给大家演示一下:

计算+1001与-0101的和

 

其实反码已经可以满足我们计算的需求了,但是遇到进位的情况计算机不可能也和我们一样可以在草稿纸上循环进位吧,我们可不可以帮计算机减轻负担呢?

补码

补码就是我们为了避免循环进位,减轻执行加法的运算时间,用的更完善的表示法。

对于负数用补码表示:补码在反码的基础上最低位加1

你是不是和我一样也没搞懂呢?这里需要引入一个“同余”的概念。我的理解也不是很深,但把它带入时钟里面。比如下午两点可以用2与14表示,这里的模是12。

把这个知识点带入计算机方面(由于我感觉自己说不太清楚,引入一个资料图片):

 

我们看看-8与-10的补码表示方法:

-8的补码表示:11000

-10的补码表示:10110

我们正好看看的计算的情况:

 

OK,如果你不实践的话,感觉自己已经理解了原码,反码和补码了,但是如果你按照这个方式计算-8与-10的结果试试?你会怀疑自己的计算能力吗?

我演示一遍:

 

两个负数相加等于正数吗?如果你和我遇到这个情况,肯定会以为自己计算失误。其实不然,这是计算机溢出的情况,我们如何解决呢?

变形码

变形码是将原来一位表示的符号用两位来表示,00和11。这是帮助我们判断是否溢出的。

在计算时如果符号位依旧是00或者11,说明结果正确。

如果符号位是01表示有正溢出,10代表有负溢出,你就看左边是1还是0来判断是什么溢出就可以了。

我借用资料里面的例子给大家展示一下:

  

OK,本次分享到此结束,希望对大家有用,

Fight!!(o^-^)尸~''☆ミ☆ミ

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值