数字电路技术基础-1-补码

 

 

了解何为补码

在数字电路中,数字的正负采用了特别的方式表达:在二进制数前增加一位符号位
并且规定,当符号位为0时,表示该二进制为正数;当符号位为1时,表明该二进制为负数。

二进制也同样需要进行加减运算,如果遇到减法,我们若仍然采用原码来表示,那必然会大大增加运算的工作量。
在这一背景下,补码诞生了,运用补码可以很好的解决这个问题(尽管这是有代价的

下面我们举一个例子来借以说明补码的作用:
假设你发现手表的时间没有对准,为了使其对准正确的时间,我们需要调整其位置,这时有两条路可供我们选择:
前进,或是倒退。
倘若将“倒退”比作减法,那么”前进“无疑就是加法。

当然,严格意义而言,这并不是加法

细心的同学可能已经发现了:
前进必然带来手表多转一圈,反映在小时制上,即有一个12小时的进位被我们忽略了

这正是补码的思想所在。

舍弃进位的条件下,减去某个数可以用加上它的补码来代替

如何得到补码

下面介绍如何得到二进制数字 N N N的补码 ( N ) C O M P (N)_{COMP} (N)COMP

  • N N N为正数时
    ( N ) C O M P = N (N)_{COMP}=N (N)COMP=N

  • N N N为负数时

    定义反码 ( N ) I N V = ( 2 n − 1 ) − N (N)_{INV}=(2^n-1)-N (N)INV=(2n1)N
    或许这样的语言您并没有直观感受,但其含义十分直观:将 N N N按位取反后即得到 ( N ) I N V (N)_{INV} (N)INV

注意:不要对符号位进行操作

此时有关系式 $( N ) C O M P = ( N ) I N V + 1 (N)_{COMP}=(N)_{INV}+1 (N)COMP=(N)INV+1$

当N为负数时,另一种得到补码的办法是:找到从右往左的第一个1,其左侧的数字按位取反,其右侧的数字保持不变

补码运算实例

给定 x 1 = 0001000 , x 2 = − 0100101 x_1=0001000,x_2=-0100101 x1=0001000,x2=0100101,试利用补码计算 x 1 + x 2 x_1+x_2 x1+x2

解:注意到这里使用正负号作为符号位,因此无需再加数字符号位
x 1 + x 2 = ( x 1 + x 2 ) C O M P = x 1 + ( x 2 ) C O M P = 0001000 + 1011010 = 0100010 \begin{aligned}x_1+x_2&=(x_1+x_2)_{COMP}\\&=x_1+(x_2)_{COMP}\\&=0001000+1011010\\&=0100010\end{aligned} x1+x2=(x1+x2)COMP=x1+(x2)COMP=0001000+1011010=0100010

若计算结果有进位,则应当舍去进位

posted @   tariya  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示