package algorithm;
public class MulCpu {
public static int multiply(int a, int b) {
int result = 0;
for (; b > 0; ) {
if ((b & 0x01) == 0x1) {
result += a;
}
a <<= 1;
b >>= 1;
}
return result;
}
//用85/6来举例,85/6=1010101/110
//a.101(0101)左移1位到第3位都小于110,因此商=000
//b.1010(101)左移四位是1010,比110大,商=0001,余数=1010-110=100(101)
//c.余数100(101)左移一位是1001,比110大,商=00011,余数=1001-110=11(01)
//d.余数11(01)左移一位是110,等于110,商=000111,余数=0(1)
//e.余数0(1)左移一位是01,小于110,商=0001110,余数=01
//
//因此85/6=1010101/110=0001110,即14,余数为最后的余数1
public static int div(int a, int b) {
int r = 0;
int result = 0;
int index = 0;
for (int i = 1; i < Integer.SIZE; i++) {
int k = a >>> (Integer.SIZE - i);
if (k >= b) {
result = 1;
r = k - b;
index = i;
break;
}
}
for (; index < Integer.SIZE; index++) {
int k = a & (0xffffffff >>> index);
r = r << 1 | (k >>> (Integer.SIZE - index) - 1);
System.out.println(a & (0xffffffff >>> index));
if (r >= b) {
result = (result << 1) + 1;
r = r - b;
} else {
result <<= 1;
}
}
return result;
}
public static void main(String[] args) {
// int muti = multiply(10, 3);
// System.out.println(muti);
int div = div(100, 3);
System.out.println(div);
}
}
乘法比较好理解,除法有点难理解,但是花点时间还是可以看懂的
这是鄙人在空闲时间实现的,如需转载,请标明出处!!!