我是靠谱客的博主 清脆玉米,这篇文章主要介绍经典算法题:使用位运算求 a + b 的结果,现在分享给大家,希望可以做个参考。

题目

给出两个整数 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 的结果的全部内容,更多相关经典算法题:使用位运算求内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部