Bitwise AND of Numbers Range

阅读更多
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

For example, given the range [5, 7], you should return 4.

给定一个范围,通过位与运算计算这个范围内所有的整数,返回计算后的结果。我们只需要从两个数的高位开始比较,如果遇到不相等的就停止,因为当这个范围内所有的数位与之后,只有高位相等且为1的情况下,这些位上的数才为1,其它都为0。我们借助一个help,long help = 1L << 31,让它从m和n的最高位开始比较。这里需要让help为长整型,因为int是有符号数,如果最高位为1,右移之后高位补1,而我们需要让高位补0,因此设定为长整形。代码如下:
public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        long help = 1L << 31;
        int result = 0;
        for(; help > 0; help >>= 1) {
            if((m & help) == (n & help))
                result += (n & help);
            else 
                break;
        }
        return result;
    }
}

  

你可能感兴趣的:(位运算)