定点数的运算 —— 原码、补码的乘法运算

一、引入


首先,我们按照平常的计算方法进行计算(如下图所示),可以很容易的得到了结果。但这却要求计算机提供多个存储空间(如蓝色方框内容所示)存储中间结果和最终结果,浪费了资源,是不可取的。
在这里插入图片描述
因此,提出了原码一位乘法和补码一位乘法。

二、原码一位乘法


  • 符号位与数值位分开求,乘积符号由两个数的符号位“异或”形成,而乘积的数值部分则是两个数的绝对值相乘之和。

题目

在这里插入图片描述

步骤一

  • 被乘数 x 和乘数 y 均取绝对值参加运算
  • 符号位为 x s ⊕ y s x_s⊕y_s xsys

在这里插入图片描述

步骤二

  • 累加寄存器(ACC)取 n+1 位(包含一位符号位,以便右移,故最终结果中ACC的第一位是符号位),初始化为0
  • 乘商寄存器(MQ)取 n 位(不含符号位),初始化为 |y| 的数值部分

在这里插入图片描述

步骤三

  • 从乘数的最低位开始判断,若 =1,则部分积加上被乘数|x|,然后右移一位;若=0,则部分积加上0,然后右移一位,由于是无符号数,故移位采用逻辑右移
  • 重复以上步骤,判断N次。

在这里插入图片描述

步骤四

  • ACC中的第2~5位和MQ中的第1~4位为乘积的数值部分

由步骤1可知,符号为 -,故乘积为 -0.10001111

三、补码一位乘法


题目

在这里插入图片描述

步骤一

  • 符号位参与运算,运算的数均以补码表示,被乘数 x 取双符号位,乘数 y 取单符号位
  • 计算被乘数 x 的负数的补码

在这里插入图片描述

步骤二

  • 累加寄存器(ACC)取 n+2 位(取双符号位,以便进行溢出检查,故最终结果中ACC的前两位是符号位),对应 [x]补 和 [-x]补 ,初始化为0
  • 乘商寄存器(MQ)初始化为 [y]补(取单符号位),末尾增设附加位(数值为0),共n+2位

在这里插入图片描述

步骤三

  • 根据y的次低位和最低位的取值确定操作(如下表),由于是有符号数,故移位采用补码的算术右移
  • 重复上述步骤,判断N+1次,但第N+1次不再移位(共进行N+1次累加和N次右移)

在这里插入图片描述

在这里插入图片描述

步骤四

ACC和MQ的前10位为乘积(前2位为符号),故|X*Y|补=11.01110001,X*Y=-0.10001111

四、原码、补码乘法的比较


在这里插入图片描述

  • 38
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值