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...