当不能使用乘法和除法的时候,可以使用位移的形式进行快速乘法,使用的是倍增思想
public int multi( int a , int b ){
int re = 0;
while( b > 0){
if(b & 1 == 1){
re += a;
}
b >>= 1;
a += a;
}
return re;
}
-
定义变量re,初始值为0,用于存储累加器的结果。
-
进入循环,只要b大于0,就继续执行下去。
-
在循环中,如果b的二进制表示的最低位是1,则将a加到re中。这是因为如果b的最低位是1,则a乘以2的对应幂次方,也就是a左移对应位数,应该被加到乘积中。
-
将b右移一位,相当于将其二进制表示的最低位删除。
-
将a加倍,相当于将其左移一位,表示a乘以2。
-
循环结束后,返回re,它存储的就是a和b的乘积