只展示如何计算整数
/**
* 使用位运算完成加减乘除
*/
public class 四则运算 {
// 加法:
public static int add(int a, int b) {
int res = a;
// 原位和
int xor = a ^ b;
// 进位和
int forward = (a & b) << 1;
if (forward != 0) {
res = add(xor, forward);
} else {
res = xor;
}
return res;
}
// 减法:加法的逆运算
public static int minus(int a, int b) {
// ~ 是取反符号
// ~5 表示把5的二进制 0 000 0101 取反:1 111 1010 变成了 -6 为了保持等于 -5 需要再加 1
b = add(~b, 1);
return add(a, b);
}
// 乘法
public static int multi(int a, int b) {
int i = 0;
int res = 0;
while (b != 0) {
// 若乘数是奇数
if ((b & 1) == 1) {
// 先不乘,直接取一个数。此时 i 为 0,res 计算完后等于 a
res += (a << i);// i 记录了需要乘 2 的次数
// 取完后,乘数就是偶数了,再按照偶数的乘法来做
// 偶数的做法就是借助 a 和 << 符号计算即可
// b 用作计数器计数乘了几次
b >>= 1;
i++;
} else {
// 乘数是偶数的话,只需要记录它是 2 的几倍,然后给 a 施加同样的倍数相乘即可
b >>= 1;
i++;
}
}
return res;
}
// 除法
public static int sub(int a, int b) {
int res = -1;
if (a < b) {
return 0;
} else {
res = sub(minus(a, b), b) + 1;
}
return res;
}
}