说明:
- 本文内容是本人在学习数字电子技术课程时,于数字电子技术(第十版,Thomas L. Floyd 著)中总结出的笔记,与大家分享。本人是大二菜狗,文章难免有错误纰漏之处,欢迎大家批评指正。
- 在本文中二进制数均使用8位数字
1 带符号二进制数
二进制符号数最左一位位符号位,0表示正,1表示负
2 二进制符号数的三种表现形式
2.1 符号数值形式
在符号数值形式下,正数和负数的数值位均为其原码,符号位0为正,1为负。
如:十进制 + 100 +100 +100 用符号数值表示为 01100100 01100100 01100100
− 100 -100 −100 用符号数值表示为 11100100 11100100 11100100
2.2 反码形式
在反码形式下,正数与其符号数值形式相同,负数是其对应正数的反码。
如:反码形式中,十进制 + 100 +100 +100 表示为 01100100 01100100 01100100
− 100 -100 −100 表示为 + 100 ( 01100100 ) +100(01100100) +100(01100100)的补码,即 10011100 10011100 10011100
2.3 补码形式
在补码形式下,正数与其符号数值形式和反码形式相同,负数是其对应正数的补码。
3 带符号数的算术运算
在计算机中负数均用补码形式表示,因为如果使用符号数值形式,在算术运算中会出现问题,如:
20 − 15 20-15 20−15 用符号表示是:
00010100 00010100 00010100
+ + + 10001111 10001111 10001111
= = = 10100011 10100011 10100011
结果为
−
35
-35
−35,所以不能采用直接相加的方法计算,
而对于补码形式
00010100 00010100 00010100
+ + + 11110001 11110001 11110001
= = = 100000101 100000101 100000101 (进位舍弃)
结果为 0000101 ( + 5 ) 0000101(+5) 0000101(+5),结果正确,可以直接利用加法器进行计算
3.1 加法
加法分为4种情况:
-
两个数均正
-
一正一负和为正
-
一正一负和为负
-
两个数均负
前两种情况结果为二进制原码,后两种情况结果为补码形式的负数(舍去最后的任何进位)。请读者自行举例验证。
个人理解: 可以将这四种情况都看做是补码加法,结果为补码。因为正数的补码是他本身,且有定理:两数补码之和等于两数之和的补码,证明见:关于“两数补码之和等于两数之和的补码”的证明
注意:两数相加可能会发生溢出情况(两数均正或均负),此时我们通过引入变形补码的方式验证是否发生溢出。
变形补码即用两个符号位来表示正负, 00 00 00 为正, 11 11 11 为负,数值位与补码形式相同,以 125 + 50 125+50 125+50 为例:
001111101 001111101 001111101
+ + + 000110010 000110010 000110010
= = = 010101111 010101111 010101111
最左边一位表示的是真实的符号:
00
+
00
=
0
x
00+00=0x
00+00=0x,
11
+
11
=
1
x
11+11=1x
11+11=1x
而左边第二位是计算出的补码的符号位,
前两位符号位不同,则表示溢出。
3.2 减法
减法即取减数的补码后,将两数相加(舍去最后的任何进位)。
3.3 乘法
-
直接加法在大多数计算机中,乘法是通过加法器完成的,即一个数加上其本身,相加次数为乘数。
-
部分积:
- 确定乘积的符号
- 将负数转变为原码的形式(因为大多数计算机以补码形式保存负数)
- 模仿竖式乘法的形式进行计算
- 如果符号为负,则取补码转换为补码形式,如果为正就保持原码
3.4 除法
计算机中的除法运算是通过减法完成的,通过加法器来完成(因为减法也是通过加法器完成的)
基本过程:
- 确定除法的符号
- 将负数转变为原码的形式
- 使用补码加法将减数从被减数中除去,商加一
- 重复步骤二直至余数为0 或负,完成减法
例:以 12 ÷ ( − 3 ) 12\div(-3) 12÷(−3) 为例
-
结果为负
-
将 − 3 -3 −3 转换为原码 10000011 10000011 10000011
-
使用补码加法将 − 3 -3 −3 从 12 12 12 中减去(即 00001100 00001100 00001100 加 − 3 -3 −3 的补码 01111101 01111101 01111101)
共减了4次,结果分别为 10001001 10001001 10001001、 00000110 00000110 00000110、 10000011 10000011 10000011、 00000000 00000000 00000000(舍去所有的最后进位)
-
商为 − 4 -4 −4 ,转换为补码形式为 11111100 11111100 11111100