leetcode 371. 两整数之和(优质解法)
2023-12-24 12:35:23
链接:371. 两整数之和
代码:
class Solution {
public int getSum(int a, int b) {
while(b!=0){
int num=a^b; //无进位值
int bit=(a&b)<<1; //进位
a=num;
b=bit;
}
return a;
}
}
题解:
? ? ? ? 要计算两个数相加并且不能使用 + - 号,一般就要采用位运算来解决该问题。
? ? ? ? ^ 异或被称为无进位相加,我们计算出异或的值再计算出进位的值即可,如 2 + 3,先计算无进位相加得到的值:?0010?^ 0011= 0001。
? ? ? ? 现在来推算一下如何得到 a,b 相加的进位:
a? ? ? ? ? ? ? ? 0? ? ? ? 1? ? ? ? 0? ? ? ? 1
b? ? ? ? ? ? ? ? 0? ? ? ? 0? ? ? ? 1? ? ? ? 1
进位? ? ? ? ? ?0? ? ? ? 0? ? ? ? 0? ? ? ? 1
? ? ? ? 由上面的推算可以看出,进位 = a & b ,所以 2 + 3 的进位为:0010 & 0011 = 0010,但是进位是加到前一位的,所以实际上此时得到的进位还需要 << 1 得到 0100
? ? ? ? 让无进位相加得到的值和进位相加,便得到了结果,但是这里又涉及到了加法,就要用无进位相加得到的值和进位继续做上述的操作,所以这就是一个循环
? ? ? ? 循环结束的条件就是进位变为 0 ,当进位变为 0 以后,就代表得到了最终的值
文章来源:https://blog.csdn.net/q322359/article/details/135179640
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!