概述
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
- 位运算:
两个数异或:相当于每一位相加,不考虑进位;
两个数相与,并左移一位,相当于求得进位;
代码
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》—— 48 位运算实现加法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复