电脑基础构造(微视频教学) - 第三章 - 计算操作与乘法器详解 - 3.3 点数确定的乘法运算步骤
3.3.1 原码一位乘法
1. 原码一位乘法运算方法
- 乘积符号的确定
根据二进制原码的特点,乘积的符号与两个操作数符号间的关系为“异或关系”,即:
Pf = x0 ⊕ y0
- 乘积的数值
乘积的数值可以由乘数与乘数的绝对值之积求得。
手动计算二进制数乘积:
原码一位乘法算法流程图
逻辑右移,高位补0
原码一位乘:
先加法再移位。乘数的符号位不用参与运算,小数点在最后结果第一位后
计算出数值后,修改符号位
例题:
x = 0.1101,y = -0.1011,用原码一位乘法求 x*y。
由例题可知,用循环累加和逻辑右移操作实现了原码一位乘法;两个n位数参加乘法运算要进行n次加法和n次位移操作;注意加法运算可能出现局部溢出(图中第2、4次位移之前),但是这只是中间计算结果,运算完毕还要进行逻辑右移操作,右移时应该将进位位移入部分积的最高位。
每次只利用乘数y中的1位来计算位积,最终需要将n个位积全部累加起来得到乘积,这种方法称为原码一位乘法。
3.3.2 补码一位乘法
2. 补码一位乘法的算法
- 乘数采用单符号位,末位增设附加为yn+1,初值为0
- 利用yn+1与yn的差值判断各步的具体运算,差值为1,累加上[x]补;差值为0,累加上0;差值为-1,累加上[-x]补。累加完成后需要进行算术右移的操作,初值为0。
- 按照上述算法进行n+1次累加操作,n次右移操作即可完成乘积运算。
- 补码乘法中,符号位参与运算,不需要单独计算符号位。
补码一位乘法算法流程图
进行n次(n为乘数的位数)加法和位移操作,最后在多来一次加法操作。
补码一位乘法:每次加法可能 +0、+[x]补、+[-x]补
yn+1 - yn = 0,+0
yn+1 - yn = 1,+[x]补
yn+1 - yn = -1,+[-x]补
每次位移为补码的算术右移,符号位不变,最高位根据符号位补位,符号位为1,补1,符号位为0,补0
符号位参与运算
符号位不用单独进行确定
yn+1初始值为0,后面运算过程中的值为前面移过来的数
多了一位附加位,其他数也要多一位数字
例题:
[x]补 = 1.0111,[y]补 = 1.0011,求 [x*y]补。
上一篇: 深入理解JDK 10:探索String类的源代码解析
下一篇: 电脑是怎样做乘法计算的?