概述
题目
给出两个整数 aa 和 bb , 求他们的和。
说明
a和b都是32位的整数
答案
public static int main(int a, int b) {
while (b != 0) {
int _a = a ^ b;
int _b = (a & b) << 1;
a = _a;
b = _b;
}
return a;
}
解析
异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。
- 那么 a ^ b 就是 a + b 相加后,该进位没有进位的运算结果
- a & b 就是 a 与 b 二进制对位数字都是1的结果,(a & b) << 1就是进位之后的结果
所以 :a + b = (a ^ b) + (a & b) << 1 ===> a = (a ^ b); b = (a & b) << 1
这个过程是模拟加法运算的过程,进位不可能一直都持续下去,b终归会变成0
所以重复上述操作(即:(a ^ b) + (a & b) << 1)
参考
https://blog.csdn.net/wohaqiyi/article/details/80931693
https://www.cnblogs.com/jasonkoo/articles/2760411.html
最后
以上就是清脆玉米为你收集整理的经典算法题:使用位运算求 a + b 的结果的全部内容,希望文章能够帮你解决经典算法题:使用位运算求 a + b 的结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复