[计算机组成原理] Booth算法 —— 补码一位乘法

x * y = z

运算规则:

1.和原码一位乘法不同,补码一位乘法的符号位参加运算的,且运算结果和所有参加运算的数都是补码形式。

2.乘数 x 取双符号位参与运算,部分积的初始值为0;

乘数 y 取单符号位参与运算。

3.乘数 y 首先在末尾添加一个辅助位 0 ,每次讨论都是取 y 的最后两位,但每次移动仅移动一位

4.判断 y 的最后两位是规则如下:

  • 00 或者 11 时,直接右移一位;
  • 01 时,先加 x 的补,然后右移一位;
  • 10 时,先加 -x 的补,然后右移一位。

5.有个特例,最后一步不用右移了。

举个栗子:

设 x = -0.1101 , y = 0.1011

则 [x]补 = 11.0011 ,[-x]补 = 00.1101

一开始 部分积初始值:00.0000

先给y补一个辅助位0,得到 y = 0.10110

首先,从y的最后两位开始看,0.10110 ,为 10 ,对应规则 “先加[-x]补,再右移一位” :

           部分积  00.0000 + 00.1101 = 00.1101 ,右移一位得到 00.01101

接着,y 右移一位再看,0.10110,为 11 ,对应规则“直接右移一位”:

           部分积  00.001101

然后,y再右移一位再看,0.10110 ,为 01 ,对应规则“先加[x]补,再右移一位”

00.001101          部分积

+ 11.0011              [x]补

--------------------

= 11.011001          部分积

           部分积 00.001101 + 11.0011 = 11.011001 ,右移一位得到 11.1011001 (注意这里符号位移动后,仍然保持为 11 )

接着,y再右移一位再看,0.10110 ,为 10 ,对应规则“先加[-x]补,再右移一位”

部分积 11.1011001 + 00.1101 = 00.1000001 ,右移一位得到 00.01000001

最后,y再右移一位再看,0.10110 ,为 01 ,对应规则“先加[x]补,再右移一位”

部分积 00.01000001 + 11.0011 = 11.01110001 ,但这已经是最后一步,不用再右移了

所以最后结果是  1.01110001   (注意:这是x*y的补码

原文地址:https://www.cnblogs.com/LeoCathyFelix/p/11022465.html

时间: 2024-08-02 12:50:15

[计算机组成原理] Booth算法 —— 补码一位乘法的相关文章

补码一位乘法(Booth算法,C语言实现)

补码一位乘法 首先了解下什么是补码? 补码概念的理解,需要先从“模”的概念开始. 我们可以把模理解为一个容器的容量.当超出这个 容量时,会自动溢出.如:我们最常见到的时钟,其容量 是 12,过了 12 点之后,就会变为 1 点, 2 点……也就是 说,超过12的部分将被丢弃.那么,在这个例子当中,时钟 的模就是12.模的概念可以帮助我们理解补码的含义. 补码的引出:假设现在时钟的时针指向 4 点的位 置,要使其指向 3 点,可以怎么操作呢?很明显,共有 2 种方法,顺时针拨 11 格(+11),

大整数算法[13] 单数位乘法

★ 引子 最近在折腾 wxWidgets,同时拖延症又犯了,所以中断了好久.这次来讲讲单数位乘法,前面讲到 Comba 和 Karatsuba 乘法,这两个算法适合用来处理比较大的整数,但是对于一个大整数和一个单精度数相乘,其效果反而会不好,因为计算量过多.实际上单数位乘法只是基线乘法的一个特例,不存在嵌套循环进位,因此可以通过优化减少计算量.另外与完整的乘法不同的是,单数位乘法不需要什么临时变量存储和内存分配(目标精度增加除外). ★ 算法思路         单数位乘法类似于计算 12345

计算机组成原理和结构图式(第二章)

计算机组成原理和结构图式(第二章) 1.数值型数据表示 1)进位计数制 (1)十进制—>二 整数部:除基取余 小数部:乘积取整 (2)二进制—>按权相加 2)数符表示:无符号数.有符号数(真值.机器数) 3)定点表示法:小数点位置固定不变,本身不占存储位 (1)整数:精度为固定的1 无符号 有符号:原码.补码 (2)小数:精度为固定的2^-7—x.xxxxxx 原码 补码 4)浮点表示法 阶码(首位阶符Ef)|尾数(首位数符Mf) 真值N=±R^E×M 阶码E,定点整数,补码/移码表示,代表数

计算机组成原理——部分速成总结存档

这篇用来存档 基本并不能帮助大家速成 只是博主突击时用来巩固时用的(假装大家都看不见) 教材:<计算机组成原理>唐朔飞版 内容:第四章到第八章不完全总结 chapter 4 存储器 存储器的层次结构:缓存-主存 提高速度 主存地址 实地址 物理地址                              主存-辅存 提高容量 虚拟存储器 虚地址 逻辑地址   2^地址线 * 数据线 =存储容量 半导体存储器芯片的译码驱动方式:线选法 重合法 动态RAM刷新: 1.       集中刷新 在规

中国石油大学胜利学院15级软件工程计算机组成原理复习提纲(上)

第一章 绪论 计算机的性能指标 吞吐量 相应时间 利用率 处理机字长 总线宽度 存储器容量 存储器带宽 主频 第二章 计算机中数据信息表示法 数值转换 数的编码表示 原码:符号位数值化,数值位不变 (1)       零的原码表示不唯一(有+0和-0) (2)       原码的表示范围: 1)  整数范围:-127<=x<=127 2)  小数范围:-(1-2-7 )<= x <=1-2-7 补码: (1)       正数:原反补表示相同 (2)       负数:对原码,符号

BOOTH 算法的简单理解

学习FPGA时,对于乘法的运算,尤其是对于有符号的乘法运算,也许最熟悉不过的就是 BOOTH算法了. 这里讲解一下BOOTH算法的计算过程,方便大家对BOOTH的理解.        上图是BOOTH算法的数学表达.由于FPGA擅长进行并行移位计算,所以BOOTH算法倒也好实现. 上图是对乘数的加码过程,具体可以见下面的例子. 7 x (-3),其中R1表示被乘数 7, R2 表示乘数 -3,那么二者对应的补码,为 R1 0111,R2 1101, P代码最终结果容量,应该为 2x 4 + 1

《计算机组成原理》知识点复习

                                                                             <计算机组成原理>知识点复习 <一>计算题 1. [x]原=0.11001110           [-x]原=(1.11001110) [-x]反=(1.00110001)      [-x]补=(1.00110010) 2. x=-0.1011=11011,x补=10101 y=-0.0101=10101,y补=11011,

计算机组成原理-第二版-唐朔飞著-课后习题详解

第1章 计算机系统概论 1. 什么是计算机系统.计算机硬件和计算机软件?硬件和软件哪个更重要?解:P3计算机系统:由计算机硬件系统和软件系统组成的综合体.计算机硬件:指计算机中的电子线路和物理装置.计算机软件:计算机运行所需的程序及相关资料.硬件和软件在计算机系统中相互依存,缺一不可,因此同样重要. 2. 如何理解计算机的层次结构?答:计算机硬件.系统软件和应用软件构成了计算机系统的三个层次结构.(1)硬件系统是最内层的,它是整个计算机系统的基础和核心.(2)系统软件在硬件之外,为用户提供一个基

重学计算机组成原理(十)- &quot;烫烫烫&quot;乱码的由来

程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二进制表示的 存储在内存里面的字符串.整数.浮点数也都是用二进制表示的 万物在计算机里都是0和1,搞清楚各种数据在二进制层面是怎么表示的,是我们的必修课. 在实际应用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的,特别是我们会遇到的乱码究竟是怎么回事儿 在开发的时候,所说的Unicode和UT