我是靠谱客的博主 清脆玉米,最近开发中收集的这篇文章主要介绍经典算法题:使用位运算求 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 的结果的全部内容,希望文章能够帮你解决经典算法题:使用位运算求 a + b 的结果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部