您的位置:首页 > 其它

通过Leetcode::Bitwise AND of Numbers Range 深化对比特位计算的理解

2015-05-03 14:17 477 查看
无聊写了一道leetcode,后来翻看discussion发现了一个网友用了一个比较巧妙的方法解题,有助于理解比特位计算的一个特性。

先上代码,后面解析:

题目是:

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.

// 我的解法
int rangeBitwiseAnd(int m, int n) {
if (m == n) return m;
int d = n - m;
int res = 0;
for (int i = 1; res < m; i <<= 1) {
if (d < i) {
res |= i;
}
if (i == 0x40000000) break;
}
return res & m & n;
}


// 网友的解法
int rangeBitwiseAnd(int m, int n)
{
int msb=0;
int t = m ^ n;
while (t >>= 1)
msb++;
unsigned int mask = ~((1 << msb) -1);
return m & mask;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 比特位 算法