[leedcode 201] Bitwise AND of Numbers Range
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7], you should return 4.
public class Solution { public int rangeBitwiseAnd(int m, int n) { /*① n&(n-1),可以去除n的最低位的1。 ② 从m一直到n,可以去掉的1就是n和m的右端不相等的部分的1。 例如对于如下m和n: 1101 00111101 –>m 1101 11111111 –>n 可以去掉的就是n的分割部分的1。 所以结果其实就是m和n公共头部*/ int res=0; if(m==0)return 0; int offset=0; while(m!=n){ m>>=1; n>>=1; offset++; } return m<<offset; } }