当前位置:网站首页>二进制乘法运算
二进制乘法运算
2022-08-02 14:03:00 【君知燕云归】
一、定点数一位乘法
1.定点原码一位乘法
* 乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积
*人工计算特点
◆ 乘积位数是乘数的二倍
◆ 相加数逐次向左偏移一位
◆ 前一部分积的最低位不再参与运算
机器计算需要解决哪些问题?
◆ 如何解决多个数据同时相加?
◆ 如何保存2N位乘积结果?
解决方法(1) ◆ 设置寄存器
* A寄存器:部分积
* B寄存器:被乘数
* C寄存器:乘数
解决方法(2) ◆ 每求得一个相加数,就与上次部分积相加
◆ 利用N位加法器实现两个N位数相乘。
* 在求本次部分积时,前一次部分积的最低位不再参与运算,因此可将其右移一位。
* 乘数最低位用完也没有用处了。乘数寄存器同时右移一位。
◆ A寄存器中保存乘积的高位部分,C寄存器中保存乘积的低位部分。



得出结果:
原码乘法是先取操作数绝对值相乘,符号位单独处理。
2.定点补码一位乘

定点补码一位乘法的规则
设被乘数 [X]补 = X0. X1X2… Xn
◆ 乘数 [Y]补 = Y0. Y1Y2… Yn
◆ 则 [X . Y]补 = [X]补(0. Y1Y2… Yn) - [X]补. Y0
例1: [X . Y]补 = [X]补(0. Y1Y2… Yn) - [X]补. Y0(其中Y0=0)
答案为:[X . Y]补 = 1.01110001 X . Y = -0.10001111
例2: [X . Y]补 = [X]补(0. Y1Y2… Yn) - [X]补. Y0(其中Y0=1)
答案为:[X . Y]补 = 0.10001111
例3:
根据补码一位乘公式 [X . Y]补 = [X]补(0. Y1Y2… Yn) - [X]补. Y0可知,当Y0=0时,需要进行n次加法运算;Y0=1时,需要进行n+1次加法运算。故最多需要n+1次。(n以乘数y的位数为准)
3.布斯公式

需要在乘数最后一位增加一位“0”,Y0也参加运算。
二、定点数二位乘法
1.原码两位乘法
左移一位相当于乘2,右移一位相当于除2。(此处需要结合例题反复理解)

例:
如果最后一次操作欠下+4X,则最后一次右移两位后还需补充+X操作,+X后不再移位。
2.补码两位乘法
根据前述的布斯算法,将两步合并成一步,可推导出补码两位乘的公式。
需要在乘数最后一位增加一位“0”,Y0也参加运算。
符号位参与运算,部分积与被乘数采用三符号位;乘数Y数值的位数为偶数设两个符号位;为奇数设一个符号位。
根据Yn-1 , Yn ,Yn+1判断
Yn-1 Yn Yn+1 组合
0 0 0 0 部分积+0,右移两位
0 0 1 1 部分积+[X]补,右移两位
0 1 0 1 部分积+[X]补,右移两位
0 1 1 2 部分积+2[X]补,右移两位
1 0 0 -2 部分积+2[-X]补,右移两位
1 0 1 -1 部分积+[-X]补,右移两位
1 1 0 -1 部分积+[-X]补,右移两位
1 1 1 0 部分积+0,右移两位
详情参考文章:补码两位乘法
例(同上布斯公式例3.34)用补码两位乘法处理
三、阵列乘法器

了解详情可参考文章:阵列乘法器
边栏推荐
- Error Correction Design Principle of Hamming Check Code
- 第四单元 路由层
- yolov5,yolov4,yolov3 mess
- C语言字符串——关于指针
- yolov5 improvement (1) Add attention focus mechanism
- 初识c语言指针
- getUserProfile接口不显示用户性别和地区
- jwt (json web token)
- [ROS] Compiling packages packages encounters slow progress or stuck, use swap
- 【ROS】编译软件包packages遇到进度缓慢或卡死,使用swap
猜你喜欢
随机推荐
What's wrong with running yolov5 (1) p, r, map are all 0
MarkDown语法汇总
使用云GPU+pycharm训练模型实现后台跑程序、自动保存训练结果、服务器自动关机
第七单元 ORM表关系及操作
Steps to connect the virtual machine with xshell_establish a network connection between the host and the vm virtual machine
猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)
uniCloud 未能获取当前用户信息:30205 | 当前用户为匿名身份
8576 顺序线性表的基本操作
C语言初级—数组元素的增删改查
chapter6可视化(不想看版)
Flask framework in-depth two
Unit 6 meet ORM
Linux: CentOS 7 install MySQL5.7
云GPU(恒源云)训练的具体操作流程
[ROS] The difference between roscd and cd
C语言日记 4 变量
The language of initial
Unit 11 Serializers
uni-app页面、组件视图数据无法刷新问题的解决办法
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十四章)





![[ROS]ROS常用工具介绍(待续)](/img/ea/e390106f750bf697e62a3a296014d2.png)
ROS通信 —— 话题(Topic)通信](/img/21/d79f2c4e246eb9ea39df9c7435bb36.png)


