优秀网站设计书籍,wordpress建英文博客,建设银行环县支行网站,企业网站优化多少钱一.题目描述
两整数之和 二.思路分析
题目要求我们实现两整数相加#xff0c;但是不能使用加号#xff0c;应该立马想到是用位运算来解决问题。之前说过#xff0c;异或就是“无进位相加”#xff0c;故本题可以先将两数异或#xff0c;然后想办法让得到的结果进位即可。…一.题目描述
两整数之和 二.思路分析
题目要求我们实现两整数相加但是不能使用加号应该立马想到是用位运算来解决问题。之前说过异或就是“无进位相加”故本题可以先将两数异或然后想办法让得到的结果进位即可。
如何进位呢我们知道任意一个比特位相加只有3中情况00,11,01其中只有11时需要进位。而按位与的特点是有0则0故我们可以用ab结果是1的比特位就是需要进位的。但进位是要进到它的下一位
故最终结果为(a ^ b) ((a b) 1)。但题目禁止我们使用加号怎么使这两部分相加呢题目本身就让我们实现加法呀重复以上的逻辑不就行了所以这是一个循环的过程。循环什么时候结束呢当不需要进位即(a b) 1 0时就不需要加了循环结束。
下面用132841来举例 三.代码实现
class Solution {
public:int getSum(int a, int b) {//异或运算的无进位相加while (b){int x a ^ b;//算出无进位相加的结果int carry (a b) 1;//算出进位a x;b carry;}return a;}
};