8*10=80 可以看成 1000 * 1010
拆出来就是 1000 * 1000 + 1000 * 10
即1000<<3 + 1000<<1 =1010000
负数先按照正数计算,最后看看负数的个数,如果是1,把结果赋值为负数。
位移实现乘法(java)
package mid;
public class ErrMul {
public static void main(String[] args) {
int a=-8,b=-9;
//统计负数个数
int negativeCount = 0;
if (a<0) negativeCount++;
if (b<0) negativeCount++;
//先按正数的计算
a=Math.abs(a);
b=Math.abs(b);
int ans=0;
int i=0;//b某位数为1时,后面跟着0的个数,也就是位移数
while (b!=0){
if ((b&1)==1){
ans+=a<<i;
}
b=b>>1;
i++;
}
//如果负数个数是1,赋值为负数
if (negativeCount==1){
ans=-ans;
}
System.out.println(ans);
}
}