1-3
异或可以看作无进位的加法
与运算却可以将进位保留下来,并且左移作为进位。
但是不进行强制类型转换,却会出现溢出问题
int getSum(int a, int b){
while(b)
{
int t = a ^ b;
b = (unsigned int)(a & b) << 1;
a = t;
}
return a;
}
4
既然不用*符号,那就使用累加,反正乘法的本质是加法
int multiply(int A, int B){
if (B == 1)
return A;
return A + multiply(A,--B);
}
5
二分法,二分失败,转而作弊
int divide(int dividend, int divisor){
if (dividend == -2147483648 && divisor == -1)
return 2147483647;
return dividend/divisor;
}
6
尝试过递归乘法运算,但是我没处理负数的情况
因此明天再改
double myPow(double x, int n){
if(n < 0)
return 1/x * myPow(1/x , n + 1);
if(n == 0)
return 1;
return x * myPow(x , n - 1);
}