> For the complete documentation index, see [llms.txt](https://jaywin.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jaywin.gitbook.io/leetcode/solutions/0201-bitwise-and-of-numbers-range.md).

# 0201. Bitwise AND of Numbers Range

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

## Description

Given two integers `left` and `right` that represent the range `[left, right]`, return *the bitwise AND of all numbers in this range, inclusive*.

**Example 1:**

```
**Input:** left = 5, right = 7
**Output:** 4
```

**Example 2:**

```
**Input:** left = 0, right = 0
**Output:** 0
```

**Example 3:**

```
**Input:** left = 1, right = 2147483647
**Output:** 0
```

**Constraints:**

* `0 <= left <= right <= 231 - 1`

## ac

```java
class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        int diff = 0;
        while (m != n) {
            m >>= 1;
            n >>= 1;
            diff++;
        }
        return m << diff;
    }
}

/**
1. if there is 0 in that digit, then it's 0 all the time.
2. odd & even, last digit is 0
3. if m != n, there must be one odd and one even, at least. so last digit is 0
4. shift m and n right 1 digit every time util they are equal
5. when m == n, move back, all digits on the right should be 0
**/
```
