不用乘法实现两个数的乘法
int multiplication(int a, int b)
{
int sign = 1;
if (b < 0)
{
sign = -sign;
b = -b;
}
if (a < 0)
{
sign = -sign;
a = -a;
}
int ret = 0;
while (b)
{
if (b & 1)
{
ret = ret + a;
}
a <<= 1;
b >>= 1;
}
if (sign < 0)
return -ret;
return ret;
}
例如12*5= 60
二进制乘法为:
a | 1 | 1 | 0 | 0 | ||
---|---|---|---|---|---|---|
b | x | 1 | 0 | 1 | ||
1 | 1 | 0 | 0 | |||
1 | 1 | 0 | 0 | |||
a*b= | 1 | 1 | 1 | 1 | 0 | 0 |
如果b和1相与的结果为1,则加上a;
b每次向右移一位,则a每次向左一位。