1、题目描述
输入m和n,求m到n范围内所有数字做与运算,得到的结果。
2、思路
naive:把m到n全都与运算,复杂度O(n);
法2:复杂度O(1);从最末位开始,找到m和n的前半部分完全相同的位置。也就是说,删除了a位的末位数字,得到新的m(n)。
将m右移a位得到答案。
3、代码
int rangeBitwiseAnd(int m, int n) {
if(m==0) return 0;
int move = 1;
while(m!=n){
m>>=1;
n>>=1;
move<<=1;
}
return m*move;
}
};