前置知识

  • 原码一位乘
  • 双符号位
  • 补码:正数与原码正数相等,负数等于原码负数取反加一,补码用原码表示0的两种表示之一来使得表示范围向下增大一个单位。

定义

补码的一位大小的乘法

运算规则

运算规则一——符号位参与运算

不同于原码一位乘法,补码一位乘法的符号位是参与运算的。(原码一位乘,使用异或运算来确定结果的符号位)

运算规则二——移位规则及其理解

在这里插入图片描述
原理:计算101x111有两种方案
101x111 = 101 x100 + 101x10 + 101x1
101x111 = 101x(1000-1) = 101x1000 - 101
第一种方案计算1的个数次,第二种方案计算的次数为连续的0和连续的1的段数和 。
拿000111111000进行解释,
于是就可以有000 111 111 000 = 001 000 000 000 - 000 000 001 000
原本算六次,现在只需算两次。
且在对 000 111 111 000 进行扫描的时候,遇到10(第3、4位),会减去000 000 001 000,遇到01会加上001 000 000 000。
且补码中可以进行减数操作。

运算规则三

最后一次无需右移

例题

X = -0.1101 Y = 0.1011
[X]补 = 11.0011 [-X]补 = 00.1101 [Y]补 = 0.1011

高位部分积低位部分积/乘数丢失位解释
00.00000.10110 (末尾0是辅助/附加位,初值为0)此时低位部分积的末两位为10,加上-X的补,并且整体向右平移
+00.1101加上-X的补
00.1101并且右移
00.011010.10110此时低位部分积的末两位为11,只需整体向右平移
00.0011010.10110整体向右平移
00.0011010.10110此时低位部分积的末两位为01,加上X的补,并且整体向右平移
+11.0011加上X的补
11.0110并且右移(注意这里负数的高位右移需要补上1)
11.10110010.10110此时低位部分积的末两位为10,加上-X的补,并且整体向右平移
+00.1101加上-X的补
00.1000并且右移
00.010000010.10110此时低位部分积的末两位为01,加上X的补,并且整体向右平移
+11.0011加上X的补
11.0111并且右移(X),最后一次不移位

更多推荐