二进制乘法原理



      二进制乘法就是左移(进位)8次,每次最高位为1则把被乘数加进去,8位移完就得出乘积了

  实际上和我们做10进制的乘法是一样的,只不过这里的进制是2罢了
  
  比如5×6,转成二进制就是0101×0110
  十进制乘法大家都会做,公式就是
  
  我们他当成十进制101×110来计算下看看
   4位乘积=被乘数×千位被+被乘数×百位+被乘数×十位+被乘数×个位
  既0101×0110=101×0000+101×100+101×10+101×0
  变化下:
   4位乘积=被乘数×千位数×1000+被乘数×百位数×100+被乘数×10位数×10+被乘数×个位数
  既0101×0110=101×(0×1000)+101×(1×100) +101×(1×10)+101×0
  
  再变化下:
   4位乘积=被乘数×千位数×10×10×10+被乘数×百位数×10×10+被乘数×10位数×10+被乘数×个位数
  既0101×0110=101×(0×10×10×10)+101×(1×10×10)+101×(1×10)+101×0
   =(((101×0)×10)+(101×1))×10+(101×1))×10+101×0
  
  我们可以看到,实际上乘法结果就是被乘数乘以每一位乘以模(10)的N次方的累计和(其实左移位就是进位啦,看得出来吗?)
  
  而换成2进制的话很简单,把10读成二进制2就行了,结果还是:
   4位乘积=被乘数×千位数×10×10×10+被乘数×百位数×10×10+被乘数×10位数×10+被乘数×个位数
  既0101×0110=101×(0×10×10×10)+101×(1×10×10)+101×(1×10)+101×0
   =(((101×0)×2)+(101×1))×2+(101×1))×2+101×0
  
   由于乘2就是移位(进位),把上面的公式中乘2换成左移位就行了
  
  PS:
  由于二进制只有0和1,乘2可以用左移一位来实现,也可以“自己加自己”来实现的,很多CPU的左移指令和“自己加自己”一样
  
  
  用软件乘法要耗费很多CPU时间,只要CPU有硬件乘法器,当然是用硬件的啦,那会快很多的。

下面这段汇编程序是用在PIC单片机上的,需要的参考下吧.
其中,R0,R1,XL,XH都是定义的变量,R0,R1为要相乘的两个数,结果放在XHXL中

引用内容 引用内容


_MUL8 CLRF XL     ;XHXL = R0*R1
       CLRF XH
       MOVLW 8
       MOVWF ZL
       MOVFW R0
       CLRC
_MUL80 RRF R1,F
       BTFSC STATUS,C
       ADDWF XH,F
       RRF XH,F
       RRF XL,F
       DECFSZ ZL,F
       GOTO _MUL80
       RETURN




上一篇: 关于电脑num lock 的设置
下一篇: 编写ST单片机程序得注意I/O赋值问题
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 编程
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
最有效的丰胸产品
最有效的丰胸产品[2011-09-15 11:28 PM | 访问 http://fx.taobao-hot.net | Mail To:wahaha@163.com | 114.225.188.24 | del | 回复回复]
2进制的精妙在于任何算法都可以通过算术+和逻辑&这2种算法来实现
ayawing
ayawing[2011-09-14 03:35 PM | 访问 http://www.bdlyy.com/ | Mail To:ayu512@yahoo.cn | 58.246.77.42 | del | 回复回复]
直接看晕了
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭