思路:首先判断是否相等,如果相等则返回n(或m),这步正好过滤掉双0的情况。然后求出m&n和m^n的值,m^n的值的二进制形式表示从哪一位开始不同,用m&n的值抹去后面的部分即可。
public class Solution {
public int rangeBitwiseAnd(int m, int n) {
if(m==n){
return n;
}
int s=(int) Math.pow(2,(int) (Math.log(m^n)/Math.log(2))+1);
return ((m&n)/s)*s;
}
}