位实现加减乘除专题

位实现加减乘除专题

在计算机中,位运算的效率比加减乘数效率更高,因此在高性能软件的源码中大量应用,而且计算机里各种运算本质上都是位运算。本专题我们就研究几个相关问题。

两整数之和

题目 :

LeetCode 371.两整数之和 :

371. 两整数之和

位实现加减乘除专题_第1张图片

分析 :

两个位加的时候,我们无非就考虑两个问题: 进位部分是什么,不进位部分是什么。从上面的结果可以看到,对于a和b两个数不进位部分的情况是: 相同为0,不同为1,这不就是a ^ b吗?

而对于进位,我们发现只有a和b都是1的时候才会进位,而且进位只能是1,这不就是a&b=1吗? 然后位数由1位变成了两位,也就是上面的 4 的样子,那怎么将1向前挪一下呢? 手动移位一下就好了,也就是(a & b) << 1。所以我们得到两条结论:

  • 不进位部分: 用a ^ b计算就可以了。
  • 是否进位,以及进位值使用(a & b ) << 1计算就可以了

解析 :

class Solution {
    public int getSum(int a, int b) {
        while(b != 0){
            int temp = (a & b) << 1;
            a = a ^ b;
            b = temp;
        }
        return a;
    }
}

这期就到这里 , 下期见!

你可能感兴趣的:(算法,数据结构,排序算法,java)