栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

两数之和-加法&位运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两数之和-加法&位运算

两数求和

牛客网-两数之和

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

int main() {

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

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<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号