给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
public int rangeBitwiseAnd(int m, int n) {
int ans = 0;
int key = 1<<31;
while(key != 0){
if ((m & key) != 0 && (n & key) != 0){
ans += key;
} else if ((m & key) != 0 || (n & key) != 0){
break;
}
key >>>= 1;
}
return ans;
}
public int rangeBitwiseAnd(int m, int n) {
while (m < n){
n &= n-1;
}
return m & n;
}
原文:https://www.cnblogs.com/MMMMMMMW/p/13289324.html