计组中原码一位乘和原码二位乘方法和注意事项

原码乘法可以分为原码一位乘和原码二位乘,两者在实现上规则大同小异

  • 原码一位乘
    原码一位乘采用数值位计算,符号位为两操作数异或结果。步骤如下:
  1. 对乘数和被乘数取绝对值(数值位不变,符号位换0)
  2. 初始化部分积的格式为0.xxxxx(小数点左边取一位)
  3. 开始判断乘数的最低位,如果最低位是1,则部分积加上被乘数
  4. 如果最低位是0,则直接进行步骤5中的移位操作
  5. 注意! 相加完毕后,先对乘数进行右移一位的操作,最高位用部分积的最低位来补;
    然后再对部分积右移一位,这里也要注意,部分积的移位采取逻辑移位,即最高位也参与移位,高位补零。
  6. 重复进行步骤3、4和5,执行次数为:乘数的小数位的位数。

注意事项:
循环步骤的进行次数为乘数的位数;结果由部分积+乘数最终的结果组成。

例题:
[x]原=-0.1011,y[原]=-0.0111,计算[x*y]原。
解:① 两数取绝对值, |x|=0.1011, |y|=0.0111
② 初始化部分积为0.0000,取乘数的小数部分:0111
③ 因为乘数最低位为1,部分积+被乘数,即0.0000+0.1011=0.1011
乘数移位,最高位用部分积最低位补: 1011;
部分积逻辑移位:0.0101 此时标记移位一次
④ 重复步骤3,部分积:0.1011+0.1011=1.0110,乘数移位后和部分积移位后结果:乘数:0101,部分积:0.1011 记第二次
⑤ 重复步骤3,移位后最终结果:乘数:0010,部分积:0.1011 记第三次
⑥ 乘数最低位为0,直接进行移位操作,乘数:1010,部分积:0.0101 第四次
⑦ 移位次数与乘数位数一样,取结果,数值位:部分积连接乘数=0.01011010,符号位:乘数和被乘数符号取异或,为0,即最终结果为:-0.01011010。

  • 原码二位乘
    原码二位乘计算过程类似原码一位乘,但在移位过程中是两位两位地移,且移位规则与一位乘有很大不同,引入了标志位。
    计算过程:
    首先需要记住以下表格
    在这里插入图片描述
    符号位取三位,即000.xxxxx
    ① 求被乘数、乘数的绝对值、对被乘数求补;初始化部分积为000.xxxxxx
    ② 对乘数最高位补0,引入标志位,标志位补0
    ③ 根据表格判断对应的操作,移位时先乘数一次移两位,最高两位由部分积的最低两位补
    ④ 乘数移动完毕后,被乘数用补码三位符号位移位规则进行右移两位
    ⑤ 重复3、4步骤直到移位次数为乘数位数/2
    ⑥ 此时还不能得出结果,需要再次对乘数低两位和标志位进行判断,最后执行一次操作,但是不移位!

注意事项:

  1. 步骤②中,如果乘数的位数是奇数位,则在最高位添加一位0即可,标志位照常;如果是偶数位,则在最高位补两位0,标志位照常。
  2. 在对部分积移动时,是采用3位符号位的补码形式移位,也就是最高符号位不动,正数在最高位填零,负数在最高位添1。
  3. 表格中的-x操作即部分积加上x的求补。
  4. 步骤⑥只进行一次,且不移位,因此,移位的次数为:乘数尾数位为奇数时,n=位数/2+1,反之为位数/2.

例题:
设x=+0.111111,y=-0.111001, 用原码二位乘求[x*y]原
解:
Ⅰ. 求绝对值 |x|=000.111111;x求补=111.000001; y尾数处理:00111001,初始化部分积000.000000,标志位 C=0
Ⅱ. 判断y末两位和C 为010,执行部分积+|x|,000.000000+000.111111=000.111111, 第一次移位:先乘数:11001110, 标志位C=0 , 部分积:000.001111
Ⅲ. 判断数为100, 执行部分积+2|x|, 000.001111+001.111110=010.001101, 第二次移位:乘数:01110011, 标志位C=0,部分积:000.100011
Ⅳ. 判断数为110,执行部分积 -x,000.100011+111.000001=111.100100, 第三次移位:乘数:00011100 ,标志位C=0,部分积:111.111001
Ⅴ.最后一次不移位判断数001,执行部分积+|x|,111.111001+000.111111=000.111000,此时乘数为00011100,丢掉最后两位,结果数位取0.111000000111,符号位为x和y符号位异或,为1。
因此,最终结果为1.111000000111。

  • 14
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡裕星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值