经常看到类似”不使用XXX符号的前提下,实现加、减、乘、除“?第一次遇见的同学可能会懵,如果你记起来一个叫位运算的东西就会豁然开朗了。
算法概述
加法:比如5+6。小学的时候数学老师告诉我们的是,先求不算进位的值,也就是1,然后再将进位结果(这里是1)加入,直到进位为0。使用位运算也是同样的道理。只不过我们对于进位和不进位的结果的产生感到陌生而已。
位运算中两个数相加的不进位结果:a^b,进位结果a&b;之后取a&b左移一位后的结果和a^b相加,如此一直加下去,直到进位为0,此时就能得到结果。
减法:减法其实也是属于加法,因为a-b=a+(-b);于是首先需要将b取相反数,位运算中只要将b位取反后加上1即可,b=~b加1。
乘法:乘法就是多次的加法而已,这里不再累述。
除法:就是多次的减法,直到被除数小于等于0。
代码示例
public class Solution3 {
public int add(int a, int b) {
int sum = a;
int arr = b;