201 Bitwise AND of Numbers Range 数字范围按位与
给定范围 [m,n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含m, n两端点)。
例如,给定范围 [5,7],您应该返回 4。
详见:https://leetcode.com/problems/bitwise-and-of-numbers-range/description/
Java实现:
将m和n中的所有整数相与,得到的结果是m和n中的所有数的共同高位保留,除共同高位之外的其他位置零。那么关键问题就是如何找到这个共同的高位,其实并不难,m和n中所有数的共同高位也就是m和n的共同高位。
方法一:
class Solution { public int rangeBitwiseAnd(int m, int n) { int res=0; while(m!=n){ m>>=1; n>>=1; ++res; } return (m<<res); } }
方法二:
class Solution { public int rangeBitwiseAnd(int m, int n) { while (m < n){ n &= (n - 1); } return n; } }
C++实现:
class Solution { public: int rangeBitwiseAnd(int m, int n) { int offset=0; while(m!=n) { m>>=1; n>>=1; ++offset; } return (m<<offset); } };
参考:https://www.cnblogs.com/grandyang/p/4431646.html