二进制补码是如何把减法转变为加法的

用一个例子来解释补码的原理:

假设现在标准时间为4点整,而有一只表已经到7点了,为了校准时间,可以采用两种方法:一种是将时针退7-4=3格;二是将时针向前拨12-3=9格,这两种方法都可以校准到4点。

摘自《计算机组成原理》p20 第2节

这个例子的意思可以理解为将7变为4,在钟表环境(12进制)下可以表示为7-3和7+9

意即钟表法则中

7-3=7+9 (称为同余式)

看了这个例子,你大概已经知道能这样做的原因是什么了

根本在于

钟表法则中超过12的数会溢出,重新从0开始计算

准确的说这里的12应该被称为模长,也是补码得以有效的关键,在表示的数值大小被限制时,有了溢出就能将减法变成加法了

有了这个条件,现在可以总结出一套推论

模长为m时,x-y=x+m-y

你可能会觉得这有什么用?还是得用模长做减法才能得出这个等效加数呀

这就是二进制得天独厚的优势了

m-y可以转变为m-1-y+1

这不是废话吗

别急,在二进制中计算机能表示的数的大小总是以位计算的,也就是说,假如总共有8位,那么模长就是2^8,能表示的是0~2^8-1之间的数。

这时候m-1表示的就是1111 1111,上面的m-1-y+1就是1111 1111 - y +1

而1111 1111-y等效于~y(对y求反),求一个数的反码在计算机中是很容易实现的,通过触发器互补输出得到

这时x-y=x+~y+1      补码由此实现将减法变为加法

 

总结

补码的意义建立在二进制和数值位数确定的情况

补码通过溢出实现将减法转变为加法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值