目录
二进制数的运算分类
一、无符号数的算术运算
1. 加法运算
二进制的加法运算遵循法则:0+0=0,0+1=1,1+0=1,1+1=0(有进位)
2. 减法运算
二进制的减法运算遵循法则:0-0=0,1-0=1,1-1=0,0-1=1(有借位)
二、有符号数的算术运算
1. 原码运算
由上述例题可见,原码加减运算复杂。因为操作数取绝对值运算,所以实际操作不仅取决于操作码(是加还是减),还与操作数的正负有关,并且还可能需要对运算结果进行修正。
而补码运算相对简单,因此在计算机中基本采用补码加减法。
2. 补码运算
补码运算的特点
- 将减法转换为加法
- 将真值表示为补码
变补
变补方法:连同符号位变反再加一。
验证方法:分正数、负数情况讨论,直接进行转换即可。
Q:“补码的运算中符号位参与了运算” ?
三、定点数的补码加减运算
操作数用补码表示,符号位参与运算,结果用补码表示。
1. 基本关系式
- 操作码为 “加” 时,两数直接相加。
- 操作码为 “减” 时,将减转换为加,即将减数变补后与被减数相加。
应用举例
根据基本关系式进行运算,便能得到正确的答案。
2. 补码加减运算规则
这张图说明了进行补码加减运算的流程。
四、溢出判断
1. 引入
在上述六个例子中,由于机器数长度为 5 位,并且由补码表示,因此定点整数表示范围为:-16 ~ 15,运算结果超出这个范围即为溢出。
2. 溢出
① 溢出:运算结果超出机器数的表示范围。
② 正溢:两正数相加绝对值超出允许的表示范围。
③ 负溢:两负数相加绝对值超出允许的表示范围。
3. 溢出的判断方法
符号说明
在补码运算中,符号位将会参与运算。
① 判断逻辑一
溢出的标志是结果的符号 Sf 与两个操作数的符号恰好相反。
只有同号数相加才可能产生溢出,因为一正一负相加,其结果绝对值不可能超过模。
② 判断逻辑二
溢出的标志是符号位进位与尾数最高位进位不同:
- Cf 与 C 不同时,有溢出;
- Cf 与 C 相同时,无溢出。
③ 判断逻辑三
溢出的标志是第一符号位和第二符号位不一致。
单符号位的信息量只能表示两种可能:数为正或为负,如果发生溢出,就会使符号位的含义发生混乱。将符号位扩充为两位,就能判别是否溢出以及正确的结果符号 —— 双符号位表示法。
双符号位表示法 | |
---|---|
00 | 正数 |
11 | 负数 |
溢出的标志 | |
---|---|
00 | 结果为正,无溢出 |
01 | 结果为正,是正溢 |
10 | 结果为负,是负溢 |
11 | 结果为负,无溢出 |
不管结果是否有溢出,第一符号位 Sf1 始终能指示运算结果的正负。
原因:若将机器数长度扩充为 6 位,由补码表示,则定点整数表示范围为:-32 ~ 31,上述六个例子的运算结果没有超出这个范围,因此不会发生溢出,即所有运算结果都是正确的。因此,第一符号位 Sf1 始终能指示运算结果的正负。但实际上机器数长度为 4 位,所以上述结果仅作为判断溢出的工具。
采用多符号位的补码又称变形补码,它的实质是扩大了模数 M、增加了数据位的宽度。个人理解,就是扩大了定点整数表示范围,使得运算结果不会发生溢出。
五、移位操作
(1)逻辑移位
主要针对于纯二进制代码 —— 无正负和大小 —— 可能表示的是一个字符。
应用:以串行方式发送数据。
(2)算术移位
数码位置和数值发生变化, 符号位不变。
希望实现的效果:
- 左移一位,真值乘以二;
- 右移一位,真值除以二。
① 正数补码以及任意数原码的移位规则
移位规则:数符不变,空位补零。
Q:为什么空位补零?
A:因为我们想达到 希望实现的效果,只有空位补零才能得到想要的结果。
- 对于单符号位,符号位不变;
- 对于双符号位,第一符号位不变,第二符号位参与移位。
第一符号位和第二符号位其实都是有效数值位,为了达到 希望实现的效果 才进行上述操作。
② 负数补码的移位规则
移位规则:数符不变,左移空位补零,右移空位补一。
Q:为什么左移空位补零,右移空位补一?
A:因为我们想达到 希望实现的效果,只有这样才能得到想要的结果。
- 对于单符号位,符号位不变;
- 对于双符号位,第一符号位不变,第二符号位参与移位。