补码(-128的补码)

二进制的负数在计算机中采用补码的方式表示。很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算。然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最想要的。那么,为什么计算机使用补码更好,又是如何通过补码来计算数值的呢?
我看过网络上很多解释补码的文章,几乎一致的回答就是符号位不变,其他各位逐位求反再加一。在此我想说,这些都不是根本原理。谁都知道这么求,数电第一章就明确写了怎么求,关键是为什么这么算,其中的原理是什么?
本文主要的内容就是深入讲解补码的原理,其中内容有相互引用成分及计算机基础要求,不适合初学者阅读。当然,随便看看无所谓啦。
1.什么是补码
这个没有找到官方定义,只进行个人定义。
个人定义:补码是计算机中用来表示负数,使得负数能够使用加法器参与加法运算的一种码。
加减是计算机中最常用的运算,加法一般使用加法器来实现,减法则使用减法器实现。那有什么办法可以将减法变为加法,这样就可以让系统只实现加法即可,答案就是补码。
理解补码最简单的例子就是时钟。
例1:
假如一个时钟现在显示的是10点钟,如何将它调到6点钟?
解:有两种方法,一是向后拨8个小时,二是向前拨4个小时
在这个例子中,8 和 4 互为补数,也就是说4的补码是8,8的补码是4,而这个时钟的模就是12
注意:可能有人会想,在往后调8个小时虽然也调到了6点,但是他实际上比原来日期多了12小时。是的,的确如此,但是你的时钟有地方存储了这多余的12个小时吗?答案是没有,所以在你调完后,你没有记录这12个小时,换句话说,你把这溢出的12个小时自动舍弃了。当第二个人来查看闹钟时间的时候,他看到的时间就是准的。
例2:
一个数的数值是11,他的模是16,那么他的补码是多少?
解:16-11 = 5,即补码就是5。
2.模
关于模没有找到固定的定义,简单来说模就是一个循环的周期,在例1中,时钟的一个周期就是12,所以模是12。一周的模是7天,一天的模是24小时。模是补码的一个重要概念。
3.使用补码运算
例3
模为32,使用补码运算该算式16-13,13 - 16。
解 16-13 = (16 + (32-13))% 32 = 35 % 32 = 3
13-16 = (13 + (32-16))% 32 = 29 % 32 = 29
4.使用补码进行二进制运算
有看过数电基础的都应该记得,第一章就有说明二进制补码是如何运算的。正数的补码即为自己,负数的补码为符号位不变,其余逐位求反再加1。
使用该定义,先通过例子求出数值,再对例子进行详细讲解,为什么可以使用负数的补码来运算。
例4 通过二进制求15-11的值
要想让减法变加法,必须转换算式为 15 + (-11)
15为正数,符号位为0,二进制表示为 01111
-11为负数,符号位为1,负数原码为 11011 ,补码符号位不变,其余逐位求反再 +1,即 10101
所以 15 + (-11) = 01111 + 10101 = 100100 舍弃第一位溢出位,即00100,即+4
引用的内容摘自 https://blog.csdn.net/zhuozuozhi/article/details/80896838

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值