!看完不会你打我:原码一位乘(详解+个人理解)

原码一位乘(详解+个人理解)

前提引入

我们人类进行正常的二进制数相乘时,可以通过竖式运算,轻松的得到结果。可是这个操作,我们实际上在无意中却进行了多个二进制数的累加。这对计算机来说十分困难,计算机只能进行两个二进制数的相加。因此,就出现了一位乘。

原理

一位乘实际上就是进行模拟人类的运算,只不过把步骤分解开来而已。
总结个口诀吧: ==乘完一位加一位,丢弃用完的一位,右移一位存一位。

首先拿来三个寄存器ABC,分别存放被乘数,乘数和部分积。
所谓部分积,顾名思义,就是当前的积。因为我们一位乘是一步一步进行累加的,所以得到的积称作部分积。

  • 先来说A寄存器。它的作用就是把竖式计算里的被乘数放在那。是的。被乘数总得有个载体。我们实际运算是写在纸上,肉眼看到并进行下一步。这个过程在计算机中可以进行类比。纸张就是我们的寄存器,肉眼看到就是加法器提取数据的过程。
  • 再来说B寄存器。首先,他有着和A寄存器类似的功能,也就是让我们能看见乘数。其次,就是前面所提到口诀中的后两句话:扔一位,存一位。
  • 扔一位?仍的是哪一位?
    扔的就是乘数的最后一位。因为我已经用它乘过被乘数了。事实上,我们在竖式运算时也无意中进行了舍弃。那这一位用完了没用了,我们就可以把他丢掉,从寄存器里删除。
  • 存一位?存的是哪一位?
    存的是算完的最低位。我们还是回归到人工计算上,是不是每次乘完一位,最低位实际上已经确定了?因为我们都是从小往大去乘,最后累加也是把高位也好低位也好一股脑地各自加起来。只不过计算机拆分了这个过程,我们就先把低位的值算完存起来。
  • 存到哪里?
    好问题。就是存到乘数寄存器中,也就是B。我们正好扔了一位,有了空位置,就可以存已经算好的低位。
  • 为什么要右移?
    正如人工计算,我们前一次部分积的最低位不再参与运算。我们没有改变每个数的权值,只是把更高位没写出来的0给补出来了。也可以理解成把原来不断左移的部分不动,变成了部分积右移。两种理解都可以,实际上是一个意思。
  • 最后来说C寄存器。在计算过程中,低位数值被不断的送往B中,最后留下的只有高位数值。
    在计算机计算完成后,把C中的值和B中的值进行合并,就自然地得到了从高位到低位的计算结果。
    至于符号位则是通过异或运算得到,++,–得到0,也就是正。±,-+得到1,也就是负。
    非常合理。 至此,我们就完成了原码一位乘。

那我们来总结一下手算原码一位乘的过程吧。

  1. 求x和y的绝对值,
  2. 根据法则进行一位乘
  3. 根据xy的正负补上符号位
  4. 顺着写出来结果

end

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值