补码一位乘法

补码乘法原则

被乘数 [ x ]补 = xf .x0 x1 x2 … xN

乘```数 [ y ]补 = yf .y0 y1 y2 … yN

乘```积 [x·y]补 = (xf xor yf).(x0 · x1 ··· xN) · (yf .y0 y1 ··· yN)

yN yN+1 操作
0 0 +0,右移
0 1 +[ x ]补,右移
1 0 +[-x ]补,右移
1 1 +0,右移

其中:

  • xf,yf为符号
  • xor 异或
  • 移位连同符号位一起移动
  • 移位时,补最高位的值右移

原码乘法例题

例: 0.1101 x 0.1011,求其结果

[ x ]原 = 01101

[ x ]补 = 01101

[-x] 补 = 10011

[ y ]原 = 01011

[ y ]补 = 01011

运算 部分乘积 乘数 说明
00000 01011[0] 默认最后一位为0
+ 10010 乘数最后一位为1,加[-x]补
= 10011 求和
11001 10101[1] 部分乘积补1,右移
+ 00000 乘数最后一位为1,加0
= 11001 求和
11100 11010[1] 部分乘积补1,右移
+ 01101 乘数最后一位为0,加[ x ]补
= 01001 求和
00100 11101[0] 部分乘积补0,右移
+ 10011 乘数最后一位为1,加[-x]补
= 10111 求和
11011 11110[1] 部分乘积补1,右移
+ 01101 乘数最后一位为1,加[ x ]补
= 01000 求和

注意:
- 符号位参加运算
- \'部分乘积\'中,最高位是符号位
- 关于计算几次,五位数求和五次,右移四次(直到把原来的乘数数值位全部移出).


数值大小为 10001111.

符号位为 0 xor 0 = 0 (正数)

=> [x·y]原 = (xf xor yf).(x0 · x1 ··· xN) · (yf .y0 y1 ··· yN) = 0.10001111

Hello world!
文章已创建 218

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部