题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
- 位运算:
两个数异或:相当于每一位相加,不考虑进位;
两个数相与,并左移一位,相当于求得进位;
代码
package nowcoder;
/*
* 48: 不用加减乘除做加法
*/
public class AddExceptOperator {
public static void main(String []args) {
int a = 10;
int b = 20;
System.out.println(add(a,b));
}
public static int add(int a, int b) {
while(b != 0) {
int sum = a ^ b;
int carray = (a & b) << 1;
a = sum;
b = carray;
}
return a;
}
}
13 的二进制 1 1 0 1 -----a 13
11 的二进制 1 0 1 1 -----b 11
-
第一轮:
a^b->0 1 1 0-----d 6
(a&b)<<1->1 0 0 1 0-----e 18 -
第二轮:
d^e->1 0 1 0 0-----f 20
(d&e)<<1->0 0 1 0 0------g 4 -
第三轮:
(f&g)<<1->0 1 0 0 0------h 8
f^g->1 0 0 0 0------i 16 -
第四轮:
h^i->1 1 0 0 0------i 24
(h&i)<<1->0 0 0 0 0------h 0讨论-解析
最后
以上就是年轻流沙最近收集整理的关于《剑指offer》—— 48 位运算实现加法的全部内容,更多相关《剑指offer》——内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复