Bitwise AND of Numbers Range
原题链接Bitwise AND of Numbers Range
计算 [m:n] [ m : n ] 范围内的所有数的与运算结果
首先需要明确几个知识点
- a&(a+1) a & ( a + 1 ) 的最低位一定是0
- 0&b 0 & b 的结果一定是0
- a&(a+1)&(a+2)&...&(a+k) a & ( a + 1 ) & ( a + 2 ) & . . . & ( a + k ) 的最低 位一定是0
所以如果n > m,那么 [m:n] [ m : n ] 范围内所有元素的与运算结果的最低位一定是0,于是有
all_nums_and(m, n) = all_nums_and(m >> 1, n >> 1) << 1
其中all_nums_and(m, n)表示 [m:n] [ m : n ] 范围内所有元素的与运算结果
代码如下
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
return n <= m ? m : rangeBitwiseAnd(m >> 1, n >> 1) << 1;
}
};