牛客网-两数之和
使用加号简单实现代码#includeusing 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<



