Day 23 of 30 days Leetcode challenge - Bitwise AND of Numbers Range

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.

Example 1:

Input: [5,7]
Output: 4

Example 2:

Input: [0,1]
Output: 0

Solution

Best explaination could be found here

class Solution {
    func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
        var m = m, n = n
        while(m < n){ 
            // -b is the 2's complement of b when do bitwise or with b  
            //we get LSB and we subtract that from b 
            n -= (n & -n)
        } 
        return n 
    }
}