关于二进制补码及补码加法的思考


前言

笔者刚学数字电路,就在二进制补码处踩了许多坑,下面就来写一下我对二进制补码的感悟。


提示:以下是本篇文章正文内容,下面案例可供参考

一、生活中了解补码

首先展示一下求补码的公式N(补)=R^n-N
这里的N是原码,R是基数,n是位数,N(补)是补码
我们用时钟来举一个例子:
有点大。。。

假如时钟要从0点转到3点,我们可以怎么转?首先,有两种方法:顺时针转3个格或者逆时针转12(基数)-3(原码)=9个格,在这里,这个9就是3在时钟里的补码

二、数字电路或系统中补码有什么作用?

补码是用来方便解决负数在数字电路或系统中的表示问题的。

三、补码,原码,反码之间的转换

1.例子

首先,当二进制数是正数时,它的补码,反码,原码相同;当二进制数是负数时,它的反码为原码的数值位取反,补码为反码+1.
我们来举一个例子看看:表格除去第一行,每一列顺次为原码,反码,补码

9-9
0100111001
0100110110
0100110111

四、补码加法运算

1.异号补码相加

我们来举一个例子:
利用二进制补码的形式计算(6-2)
列一下竖式:
在这里插入图片描述
因为是四位二进制加法计算,所以画圈的进位1丢掉,结果为0100

2.同号补码相加

接下来我们看一下同号相加的例子:
利用二进制补码计算(6+2)
列一下竖式:
在这里插入图片描述
按照上面的舍弃进位,最后的结果为1000是个负值,这个怎么回事?
这就涉及到了一个名词溢出
怎么判断溢出
首先,有这样一个规律:
两个符号相反的数相加不会产生溢出,只有两个符号相同的数且进位位和符号位不同才会产生溢出
为什么两个符号相反的数相加不会产生溢出?
首先,n位二进制补码表示的数的范围是-2^(n-1)~(2^(n-1)-1),那么4位二进制补码表示的数的范围是-8 ~ +7,所以,无论是-8+0还是0+7都不会超出范围。
怎么解决溢出?
用上面题来说,只需把4位二进制补码变成5位二进制补码就OK了,如下:
在这里插入图片描述
这样结果就是01000也就是十进制8了。

总结

以上就是我的感悟了,希望对大家有帮助。

如果对你有帮助,那就点赞支持一下吧
微信公众号:编程小随笔 欢迎关注!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值