booth算法的证明,补码booth算法中移位的问题!

2021-01-22 10:02:33 字数 2563 阅读 1162

1楼:匿名用户

比较好的带符号数乘法的方法是布斯(booth)算法。它采用相加和相减的操作计算补码数据的乘积。booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。

判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。在上例中,第一次判断被乘数0110中的最低位0以及右边的位(辅助位0),得00;所以只进行移位操作;第二次判断0110中的低两位,得10,所以作减法操作并移位,这个减法操作相当于减去2a的值;第三次判断被乘数的中间两位,得11,于是只作移位操作;第四次判断0110中的最高两位,得01,于是作加法操作和移位,这个加法相当于加上8a的值,因为a的值已经左移了三次。

一般而言,设y=y0,yly2…yn为被乘数,x为乘数,yi是a中的第i位(当前位)。根据yj与yi+1的值,booth算法表示如下表所示,其操作流程如下图所示。在booth算法中,操作的方式取决于表达式(yi+1-yi)的值,这个表达式的值所代表的操作为:

0 无操作

+1 加x

-1 减x

booth算法操作表示

yi yi+1 操作 说明

0 0 无 处于0串中,不需要操作

0 1 加x 1串的结尾

1 0 减x 1串的开始

1 1 无 处于1串中,不需要操作

乘法过程中,被乘数相对于乘积的左移操作可表示为乘以2,每次循环中的运算可表示为对于x(yi+1-yi)2^31-i项的加法运算(i=3l,30,…,1,0)。这样,booth算法所计算的结果 可表示为:

x×(0-y31)×2^0

+x×(y31-y30)×2^1

+x×(y30-y29)×2^2

…[1] +x×(y1-y0)×2^31

=x×(-y0×231 +y1×2^30 +y2×2^29+y31×2^0)

=x×y

例:用booth算法计算2×(-3)。

解:[2]补=0010, [-3]补=1101,在乘法开始之前,r0和r1中的初始值为0000和1101,r2中的值为0010。

在乘法的第一个循环中,判断r1的最低位和辅助位为10,所以进入步骤1c,将r0的值减去r2的值,结果1110送人r0,然后进入第二步,将r0和rl右移一位,r0和r1的结果为11110110,辅助位为l。

在第二个循环中,首先判断rl的最低位和辅助位为0l,所以进入步骤1b,作加法,r0+r2=1111+0010,结果0001送入r0,这时r0r1的内容为0001 0110,在第二步右移后变为0000 1011,辅助位为0。

在第三次循环中,判断位为10,进入步骤lc,r0减去r2,结果1110送入r0,r1不变;步骤2移位后r0和r1的内容为1111 01011,辅助位为1。

第四次循环时,因两个判断位为11,所以不作加减运算,向右移位后的结果为1111 1010,这就是运算结果(—6)。

这个乘法的过程描述如下表所示,表中乘积一栏表示的是r0、r1的内容以及一个辅助位p,黑体字表示对两个判断位的判断。

用booth补码一位乘法计算2 ×(-3)的过程

循环步骤

乘积(r0,r1, p)

0初始值

0000 1101 0

第一次循环

1c:减0010

1110 1101 0

2:右移1位

1111 0110 1

第二次循环

1b:加0010

0001 0110 1

2:右移1位

0000 1011 0

第三次循环

1c:减0010

1110 1011 0

2:右移1位

1111 0101 1

第四次循环

1a:无操作

1111 0101 1

2:右移1位

1111 1010 1

4.补码两位乘

补码两位乘运算规则是根据补码一位乘的规则,把比较yiyi+1的状态应执行的操作和比较yi-1yi 的状态应执行的操作合并成一步,便可得出补码两位乘的运算方法。

补码两位乘法运算规则如下

判断位yi-1y iyi+1

操作内容

000[zi+1]补=2-2[zi]补

001[zi+1]补=2-2

010[zi+1]补=2-2

011[zi+1]补=2-2

100[zi+1]补=2-2

101[zi+1]补=2-2

110[zi+1]补=2-2补}

111[zi+1]补=2-2[zi]补

由上表可见,操作中出现加2[x]补和加2[-x]补,故除右移两位的操作外,还有被乘数左移一位的操作;而加2[x]补和加2[-x]补,都可能因溢出而侵占双符号位,故部分积和被乘数采用三位符号位。

例:[x]补=0.0101,[y]补=1.0101 求: [x

补码booth算法中移位的问题!

2楼:枫林叶丹

我日!等了半天 这么个破问题也没人解决 幸好我自己弄懂了首先右移的时候把部分积r0和乘数ri 看为一个整体然后看r0最高位是什么 是0就在后面加个0 然后整体往右移 要是1就加1

得到的就是结果!

分数指数幂的运算法则如何证明,分数指数幂的证明

1楼 匿名用户 用对数和指数的相关知识可以证明的,例如 共7步,1到2是指数转对数,2到3是移项,3到4是对数系数移入对数的真数,4到5是对数转指数,5到6是开3次方,6结合1就得到7了。 分数指数幂的证明 2楼 匿名用户 证明如图所示 一 分数指数幂重点 1 分数指数幂的含义的理解。 2 根式与分...

小数乖法中积的末尾有零算不算一位

1楼 yzwb我爱我家 这个要具体问题具体分析 在判断积的小数位数时,应根据计 算法则来判定,这时候末尾的零算一位。写最终的结果时,又可以根据小数的基本性质,将末尾的0省略不写。 判断两个因数的积是几位小数的方法 判断两个因数的积是几位小数,首先判断这两个因数一共有几位小数,积的小数的位数等于两个因...

你能提出哪些用乘法或除法计算的问题

1楼 匿名用户 家里有18个人,有54个鸡蛋,请问,每个人能分到几个鸡蛋?答 把54个鸡蛋分成18个1分,一共可以分3分,所以每个人可以分三个鸡蛋 数学 理工学科 学习 2楼 匿名用户 用逆推法 ,先去分母,两边同乘4 1 x 1 y 1 z 又因为x y z 1得4 12xzy 8zy 8xz 8...