leetcode-两整数之和

题目

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

示例 1:

输入: a = 1, b = 2
输出: 3
示例 2:

输入: a = -2, b = 3
输出: 1

思路

通过观察异或运算的真值表,与加法的真值表特别地像。需要注意的是异或只看本位,加法可能需要进位。从而用到与运算&
1 0 1
1 1 1
0 1 0
0 0 0
与运算可以很好地解决加法进位的问题,加法进位和 与 运算结果 对应:1+0、0+1、0+0的进位都是0, 1+1的进位为1。
通过异或得到了本位和,通过与运算得到了进位值,最后,只需要将进位值给高一位即可。

算法知识点补充

运算符详细见

1.与运算符

与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。
public class data13
{
public static void main(String[] args)
{
int a=129;
int b=128;
System.out.println(“a 和b 与的结果是:”+(a&b));
}
}
运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

移位运算符

a右移一位,写成a<<=1; 等同a=a<<1;

代码

/*
 * @lc app=leetcode.cn id=371 lang=java
 *
 * [371] 两整数之和
 */

// @lc code=start
class Solution {
    public int getSum(int a, int b) {
        while(b!=0){
            int carry = (a&b)<< 1;
            a = a^b;
            b = carry;
        }
        return a;

    }
}
// @lc code=end


发布了120 篇原创文章 · 获赞 10 · 访问量 9043
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览