0%

23.数字范围按位与

题目

解析

  1. 与&只要有一个为0,则与的所有数为0
  2. 对每个 分别判断是否有0
  3. 首先判断m的第i位是否为0
  4. 然后判断第i位为0,且$>$m的最小的数是否大于n,如果大于,则这些都为1

代码

1
2
3
4
5
6
7
8
9
10
int rangeBitwiseAnd(int m, int n) {
int res = 0;
for(int i = 0; (1ll << i) <= m; i++) {
if(m >> i & 1) {
if(((m & ~((1ll << i) - 1)) + (1ll << i)) > n)
res += (1 << i);
}
}
return res;
}