二进制的序列有一定规律
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
10:1010
11:1011
12:1100
13:1101
14:1110
15:1111
从第0bit位(最低)起,'1'都一连续2^bitId次数出现,只要m~n不都在某一个连续的'1'区间,该bit位最后的结果必然是0
<pre name="code" class="cpp">class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
if (m==n) return m;
unsigned int _m=m,_n=n;
unsigned int num=n-m+1,ret=0,j,st;
for (unsigned int i=2;i<=_n;i<<=1){
if (num>i||(_m&i)==0) continue;
j=i-1;
st=_m&j;
if (i-st>=num){
ret^=i;
}
}
return ret;
}
};