两数之和-加法&位运算

两数之和-加法&位运算,第1张

两数求和

牛客网-两数之和

使用加号简单实现代码
#include 
using namespace std;

int main() {

    // write your code here......
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    
    return 0;
}
不使用加法来实现中的逻辑运算

C++代码不用加法来是实现正数的的加。

  • 异或运算(^)意思就是 相同为0,不同为1
  • 另外一个就是与运算(&)都为1的时候为1
  • 位运算左移就相当于每次乘以2(<< 1)也就相当于进1位,让后进行运算,例如 1001的值位 9那么左移一位 1001<<1=10010 的为 从右往左就是 0+2+0+0+16=18
简单位运算实现正整数的加法 *** 作的思路
  • 1·第一步通过异或来获取每个位置上不同的值
  • 2·通过&与运算来获取都位1的值的位置
  • 3·判断是否存在进位
  • 4·对当前carry的值做移动一位,来进行进位 *** 作
  • 5·将sum的值赋给a
  • 6·将carry的值赋给b
  • 7·再尽心对应的^和&运算
#include 
#include 
using namespace std;
class Solution {
public:
    int add(int a, int b) {
        //两个数值要进行相加-其位置上的数字可以使用^ 运算符 相同位0,不同位1,这样就获得了每个位置上的二进制代码
        //但是会存在一个问题,那就是在进位的时候-无法完成进位的 *** 作
        //先来第一步
        int sum=a^b;//获取每个位置上数值
        //第2步考虑进位,什么情况下会有进位 ,那就是都位1的时候要进位,所以我们进行&运算,都为1的位置
        int carry=a&b;
        //那什么情况下就不进行进位了,那就是 a&b为0的时候,所以在这里我们使用while循环
        while(carry!=0){
            //左移运算相当于乘法运算,左移K位等于将这个数字乘以2也就进一位
            carry=carry<<1;
            a=sum;
            b=carry;
            //记录对应的值
            sum=a^b;//再进行一次运算
            //继续求当前 a&b的值
            carry=a&b;
        }
        return sum;
    }
};
int main() {
    int a,b;
    cin>>a>>b;
    Solution sum;
    cout<<sum.add(a,b);
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/740984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存