public class 加减法 {
public static void main(String[] args) {
System.out.println(minus(-4,-3));
}
public static int plus(int a ,int b) {
if(a == 0) {
return b;
}
if(b == 0) {
return a;
}
int x = (a&b) << 1; //这个相当于是进位 与一下是1说明都是1,把它们左移就是全部进位的数,再和下面没进位的一加就是结果
int y = (a ^ b); //这个相当于是没进位的,或一下是1说明只有一位是1
return plus(x,y);
}
//其实减法相当于是加上这个数的相反数,而a的相反数等于~a+1
/*众所周知,计算机是看补码的所以,比如一个数5其原码为 0000 0000 0000 0101,而正数的原、反、补码相同,
*~5就是 1111 1111 1111 1010,而这是补码,要转成十进制,先看它的原码,原码 = 补码的符号位不变各位取反加一
*即1000 0000 0000 0110 即-6,
* */
public static int minus(int a,int b) {
if(a == b) {
return 0;
}
return plus(a,~b+1);
}
}
不用加号和减号来实现加减法(利用位运算)
最新推荐文章于 2022-07-10 20:03:29 发布