Bitwise AND of Numbers Range (LeetCode)

Question:

https://leetcode.com/problems/bitwise-and-of-numbers-range/

 

其实就是求n和m的相同部分的值。比如n=110****, m=111****,则值为1100000。所以可以简单从最高位bit开始比较,如果相同则加到结果里,不同则退出循环.

或者m和n先相与,得到110****,只保留这个值里最高位连续的几个1,就是结果。

class Solution {
public:

    int rangeBitwiseAnd(int m, int n) {
        
        if (m == n)
            return m;
        
        unsigned int mask = 0x80000000;
        int result = 0;
        
        for (int i = 0; i < 32; i++)
        {
            // if same continue, else break
            if ((m&mask) == (n&mask))
                result += m&mask;
            else
                break;
                
            mask = (mask >> 1);
        }
        
        return result;
    }
};

 

posted @ 2015-05-04 14:02  smileheart  阅读(125)  评论(0)    收藏  举报