原码一位乘法的实现算法(一)

用原码实现乘法运算是十分方便的。原码表示的两个数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。

假定 [X]原 = XSX1 X2… Xn

[Y]原 = YSY1Y2… Yn

则 [X*Y]原 = [X]原 * [Y]原

= (XS⊕YS) (X1X2 … Xn) * (Y1 Y2 … Yn)

结果是把符号位和数值邻接起来。

为了引出在计算机中实现定点原码一位乘法的具体方案,先看手工乘法运算的实际执行步骤。

假定:   X= 0.1101   Y= 0.1011

0. 1 1 0 1

* 0. 1 0 1 1

1 1 0 1      X*Y = 0.10001111,符号为正

1 1 0 1

0 0 0 0

1 1 0 1

0. 1 0 0 0 1 1 1 1

在手工计算时,其算法与执行步骤:

① 依乘数每一位上的取值为1还是为0,决定相加数取被乘数的值还是取零值;

② 各相加数从乘数的最低位求起,逐位变高并将相加数逐个左移一位,最后一步一次求和;

③ 符号位按正乘正、负乘负结果的符号位为正,正乘负、负乘正结果的符号为负的方案求出乘积的符号。

在计算机内实现原码乘法运算,则不能简单照搬上述方法,主要表现在以下诸方面。

首先,在运算器内是很难实现多个数据同时相加的,通常只能完成对两数的求和操作。这一点比较容易解决,可以每求得一个相加数,就同时完成与上一次部分积相加的操作;

其次是在手工计算时,各相加数逐个左移一位,最终相加数的位数为相乘二数位数的两倍,而在计算机中,加法器的位数一般与寄存器的位数相同,而不是寄存器位数的两倍。这实际上也可以用另外的办法加以解决。手工计算时,各相加数是逐位左移一位,但很容易发现,在计算机内,在每次计算本次部分积之和时,前一次部分积的最低一位是不再参与相加计算的。这就意味着,若采用每求得一次部分积之后使其右移一位,则可以只用N位的加法器就能实现两个N位的数相乘,并有可能求得双倍位数的乘积。显而易见,若前一次部分积已经右移一位,就可以用其高位部分,再用加被乘数或加零的方法求得本次的部分积。

最后一点,手工计算时,乘数每一位的值是0还是1都能直接看见,而在计算机内,若采用放乘数的寄存器的每一位来直接决定本次相加数是被乘数还是零,实现起来是不方便的,若均采用该寄存器的最低一位来执行这种判别就简便多了。为此,可以在每求一次部分积,使放乘数的寄存器执行一次右移操作即可实现。若移位时,使其最高一位数值位接收加法器最低位的移位输出,则完成乘法运算后,该寄存器中保存的将是乘积的低位部分,而原来的乘数在逐位移位过程中已经丢失。

计算机内求乘积的符号,很容易用求相乘二数符号的半加和(异或值)实现。

有了上述说明,我们就可以得到如图2.6所示的实现原码一位乘法的逻辑电路框图。

图2.6 实现原码一位乘法运算的逻辑线路框图

乘法开始时,A寄存器被清为零,作为初始部分积。被乘数放在B寄存器中,乘数放在C寄存器中。实现部分积和被乘数相加是通过给出A→F命令和B→F命令实现的,部分积右移一位送A寄存器是通过把 F右斜一位的命令F/2→A来控制完成的,用F A命令完成把运算器的输出直接(不移位)送到A寄存器。

C寄存器是用移位寄存器实现的,本身能在移位命令C/2→C控制下自行移位,其最低位的值可用作B→F的控制命令。请注意,加法器最低一位的值,右移时将移入C寄存器的最高数值位,使相乘之积的低位部分保存进C寄存器中,原来的乘数在逐位右移过程中丢失了。

图上还给出了一个计数器T,用来控制逐位相乘的次数。它的初值经常放乘数位数的补码值,以后每完成一位乘计算就使其计数一次,待计数到0时,给出结束乘运算的控制信号。

图上未画出求结果的符号的电路,可以通过对相乘两数的符号执行异或操作完成。

原码一位乘法的实现算法(二)

用原码实现乘法运算是十分方便的。原码表示的两个数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。

下面是恢复余数除法的一个例子。

假定 X=0.1011 , Y=0.1101, 则有 [X]补 = 00 1011

[Y]补 = 00 1101 , [-Y]补 = 11 0011

除法计算结束,二数符号异或为0,商是 +0.1101,余数为0.0111 * 2-4 ,余数0111是左移4次后得到的结果,所以真正的结果为这个值乘上2-4。若最后一次的余数为负,正确的余数应为 +Y 恢复后的正余数乘上2-4 。

这种方法的缺点是明显的,当某一次 -Y的差值为负时,要多一次+Y恢复正余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用。在计算机中普遍采用的是不恢复余数的除法方案,它是对恢复余数除法的一种修正措施,即当某一次减得的差值为负时,不是恢复它为正差值后再继续运算,而是设法直接用这个负的差值直接求下一位商,其实现原理叙述如下:

在恢复余数的除法运算中,若第i-1次求商时的余数为 +Ri-1 ,本次上商为1,下一次求商用的办法是

Ri= 2Ri-1 - Y

当Ri < 0时,第i位的商上0,而恢复余数的操作结果应为Ri + Y,下一次,即第i+1次求商的减法操作是

Ri+1= 2 (Ri+ Y ) - Y = 2 Ri + 2Y - Y = 2Ri+ Y

上述公式表明,当某一次求商,其减得的差值为负,即R<0时,本次上商为0,继续求下一位商时,可以不必恢复正余数,而是直接将负的差值左移一位(得2R)后,再采用加上除数的办法来完成,即通过判别2R+Y运算的结果为正还是为负。由此可得出不恢复余数的除法运算规则为:

当余数为正时,商上1,求下一位商的办法,是正余数左移一位,用减去除数的办法得到;

余数为负时,商上0,求下一位商的办法,是负余数左移一位,用加上除数的办法得到。即在本方案中,在求得本位商值的同时,还要影响到用减去还是用加上除数的操作继续求下一位商,所以不恢复余数除法又叫加减交替除法。

下面给出不恢复余数除法执行除运算过程的一个例子。用的还是X=0.1011,Y=0.1101这两个值, [X]补 = 00 1011 , [Y]补 = 00 1101 , [-Y]补 = 11 0011。

运算结果,商的数值位为1101,符号位为相除二数符号的异或值0,结果为+0.1101。

原码一位除的不恢复余数的运算过程的详细控制流程如图2.9所示。

图2.9 不恢复余数除法的运算的控制过程

至此,我们可把定点原码一位除的实现方案小结如下:

(1) 对定点小数除法,首先要比较除数和被除数的绝对值的大小,需要防止出现数值溢出的错误。

(2) 商的符号为相除二数的符号的半加和。

(3) 计算机中用加减交替法实现除法运算时,被除数的位数可以是除数的两倍,其低位的数值部分,开始时放在用于保存商的寄存器中。运算过程中,放被除数和商的寄存器同时左移一位。

(4) 在计算机中,求差和移位是在同一个操作步骤中完成的,而不是像我们书面写的那种形式用两个步骤完成。

一位原码的乘法规则_原码一位乘法的实现算法相关推荐

  1. 一位原码的乘法规则_原码一位乘法与补码一位乘法

    原码1位乘法 在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到.而乘积的数值部分则是两个正数相乘之积.设n位被乘数和乘数用定点小数表示(定点整数也相同适用) 被 ...

  2. 4位格雷码的顺序编码_格雷码编码规则_格雷码有什么规律

    格雷码 典型的二进制格雷码简称格雷码,因1953年公开的弗兰克·格雷专利"Pulse Code Communication"而得名,当初是为了通信,现在则常用于模拟-数字转换和位置 ...

  3. 4位格雷码的顺序编码_格雷码那点事——递归非递归实现

    简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...

  4. 位地址和字节地址换算_修改飞机24位地址码

    航空维修专业者,每天和你分享不一样的飞机新鲜事! 以下文章来源于公众号: 九品机务--机务君 目前大多数的民航客机都安装有S模式应答机,在之前的文章中也有过简单介绍,相较于A模式和C模式的应答机,S模 ...

  5. 工业机器人码垛教学实施_工业码垛机器人存在问题与解决对策

    摘  要该文首先介绍了工业码垛机器人应用的适用领域.应用的意义及特点,阐述了工业码垛机器人系统的组成部分,详细分析了工业机器人码垛应用中所存在的多样化产品码垛,机器人抓取定位,结构设计,负载能力和码垛 ...

  6. 四轴码垛机器人配件_四轴码垛机器人的应用范围

    随着机器人技术的发展,在制造业中出现了很多机器人的身影,四轴码垛机器人就是其中的一种,现在码垛机器人代替了人工在作业,那么大家知道四轴码垛机器人的应用范围是什么吗?小编整理了一些相关的资料,大家一起来 ...

  7. mysql主码和外码能一样吗_主码、候选码、外部码之间的联系与区别

    展开全部 主码包含候选码和码,候选码包含码. 1.含义不同:若关系中的某一属性组的值能唯一地标识一个元e68a84e8a2ad3231313335323631343130323136353331333 ...

  8. 4位格雷码的顺序编码_格雷码编码 解码 实现(Python)

    作者:曹博 01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 0 ...

  9. 财码python官网_财码Python小实验之融资分析

    从本篇开始,财码小秘书将带小伙伴们进入投融资专题,今天的主题是融资分析小实验,欢迎大家来撩 . 01 融 资 概 述融资是指企业为满足生产经营资金的需要,向企业外部单位或个人以及从其企业内部筹措资金的 ...

  10. 重物码垛搬运机器人_搬运码垛机器人的特点及应用

    在众多的工业机器人中,搬运机器人无疑是应用率较高的机器人之一,不管是在工业制造.仓储物流.烟草.医药.食品.化工等行业领域,还是在邮局.图书馆.港口码头.机场.停车场等场景,都可以见到搬运机器人的身影 ...

最新文章

  1. iOS12 UITabbar Item 向上漂移错位的bug
  2. 数据库安全性之使用命令来实现用户管理以及角色.十五
  3. 《中国人工智能学会通讯》——第3章 3.1基于深度学习的网络表示研究进展
  4. 文本处理相关资料整理
  5. DL之DNN优化技术:DNN优化器的参数优化—更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解、图表可视化比较
  6. phpmyadmin修改mysql数据库_用phpMyAdmin修改mysql数据库密码
  7. fopen -- 打开文件或者 URL
  8. 免扣(抠)PNG格式图片,让你告别抠图之痛!
  9. 搭建大数据平台的步骤有哪些
  10. 算法设计与分析基础第二章部分课后题答案
  11. 利用FreeMarker生成java源代码
  12. npm方法创建一个vue项目,引入element插件
  13. github上传代码步骤
  14. 各种绩效考核方法的区别
  15. 强化学习——格子游戏问题
  16. scikit-learn中的Scaler
  17. 荣耀play5t活力版和荣耀畅玩20哪个好 哪个更值得入手
  18. 参考文献格式详细解释和引用(常见)
  19. 2020年书法落款_散文书法落款-2020年书法落款怎么写?
  20. 【面经】国信证券数据清算工程师面经

热门文章

  1. 基于matlab的自适应滤波器,基于MATLAB的自适应滤波器的设计与实现.doc
  2. js封装ajax方法
  3. 中国智能配电系统行业市场供需与战略研究报告
  4. ubuntu测试硬盘的读写速度
  5. 001.UG_NX概述
  6. WIN7下怎么安装iis教程
  7. Origin软件使用TIPS
  8. pythonopencv直方图均衡化_OpenCV-Python教程(10、直方图均衡化)
  9. 阿里云短信验证码发送类
  10. 记录一个可以word,xls,PDF互转思维导图的工具