前言
笔者刚学数字电路,就在二进制补码处踩了许多坑,下面就来写一下我对二进制补码的感悟。
提示:以下是本篇文章正文内容,下面案例可供参考
一、生活中了解补码
首先展示一下求补码的公式N(补)=R^n-N
这里的N是原码,R是基数,n是位数,N(补)是补码
我们用时钟来举一个例子:
假如时钟要从0点
转到3点
,我们可以怎么转?首先,有两种方法:顺时针转3个格
或者逆时针转12(基数)-3(原码)=9个格
,在这里,这个9
就是3
在时钟里的补码
。
二、数字电路或系统中补码有什么作用?
补码是用来方便解决负数在数字电路或系统中的表示问题的。
三、补码,原码,反码之间的转换
1.例子
首先,当二进制数是正数时,它的补码,反码,原码相同;当二进制数是负数时,它的反码为原码的数值位取反,补码为反码+1.
我们来举一个例子看看:表格除去第一行,每一列顺次为原码,反码,补码
9 | -9 |
---|---|
01001 | 11001 |
01001 | 10110 |
01001 | 10111 |
四、补码加法运算
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
了。
总结
以上就是我的感悟了,希望对大家有帮助。
如果对你有帮助,那就点赞支持一下吧
微信公众号:编程小随笔
欢迎关注!