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,因此设定为长整形。代码如下:
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; } }
上一篇: Missing Number
下一篇: 古代最著名的小偷:时迁最后是什么结局?
推荐阅读