欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Bitwise AND of Numbers Range

程序员文章站 2022-05-02 19:09:39
...
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;
    }
}

  
相关标签: 位运算