数字电路技术基础-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=(2n−1)−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
若计算结果有进位,则应当舍去进位
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)