当前位置:   article > 正文

两数之和-加法&位运算_两数与运算

两数与运算

两数求和

牛客网-两数之和

使用加号简单实现代码

#include <iostream>
using namespace std;

int main() {

    // write your code here......
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

不使用加法来实现中的逻辑运算

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 <iostream>
#include <iostream>
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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/175746
推荐阅读
相关标签
  

闽ICP备14008679号