给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
int rangeBitwiseAnd(int m, int n){
char offset = 0;
for(; m != n; ++offset)
{
m >>= 1;
n >>= 1;
}
return n << offset;
}
思路:连续数字按位与,假如其中的一位出现0,那么这位就不需要在进行运算。
那么可以理解成最后的有效位就是这些数字的公共位,就是有有一段范围内的数据这些数字都是为1
可以看到最后输出的就是公共都为1的位置。那么也可以理解成寻找m, n两个位置的连续的公共位都相同的位置,最后再输出。