移位相加法(也称为位移累加法)是计算机中实现二进制乘法的一种高效算法,其核心思想是通过左移操作和逐位相加来计算乘积。以下是具体步骤和示例:
一、基本原理
移位操作 :左移操作相当于将二进制数乘以2的幂次。例如,`a << b`表示将`a`左移`b`位,相当于`a * 2^b`。逐位相加:
将乘数(二进制数)的每一位与被乘数相乘,结果通过左移对应位数后累加到总和中。
二、计算步骤
以二进制数`1101`(十进制13)和`101`(十进制5)为例:
初始化:
设`a = 1101`(被乘数),`b = 101`(乘数),结果`sum = 0`。
逐位处理
- 从最低位开始,检查乘数`b`的每一位:
- 第0位(1):`1101 * 1 = 1101`,左移0位后加到`sum`,`sum = 1101`。
- 第1位(0):`1101 * 0 = 0000`,左移1位后加到`sum`,`sum = 0000`(无变化)。
- 第2位(1):`1101 * 1 = 1101`,左移2位后加到`sum`,`sum = 110100`。
合并结果:
最终`sum = 1000001`(十进制65)。
三、通用算法
循环处理:
对乘数`b`的每一位重复上述操作,直到处理完所有位。
优化技巧:
若乘数是2的幂次(如`100`即`2^6`),可直接左移被乘数`a` 6位,效率更高。
四、注意事项
符号处理:上述方法适用于无符号整数。若涉及负数,需先转换为补码形式。
溢出风险:大数运算时需注意二进制位数限制,避免溢出。
通过移位相加法,计算机能高效地完成二进制乘法运算,其底层实现与十进制乘法原理一致,仅进制基数从10变为2。