# 2022-06-15

## [201. 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 <= 2^31 - 1`

### Solution

#### Approach #0

```go
func rangeBitwiseAnd(left int, right int) int {
    shift := 0
    for left < right {
        left, right = left>>1, right>>1
        shift++
    }
    return left << shift
}
```

#### Approach #1

```go
func rangeBitwiseAnd(left int, right int) int {
    for left < right {
        right &= (right - 1)
    }
    return right
}
```
