Bitwise AND of Numbers Range Explained
Problem Statement
Given two integers left and right representing the inclusive range [left, right], compute the bitwise AND of all numbers in this range. The key insight is that bits that differ across the range will become 0 in the result, so the solution involves finding the common prefix of left and right. This problem tests your ability to optimize bitwise operations over a sequence.
Example
Input: left = 5, right = 7
Output: 4
Explanation: 5 = 101, 6 = 110, 7 = 111. The bitwise AND of 101 & 110 & 111 is 100 = 4.
Code
Java
Python
JavaScript
public class Solution {
public int rangeBitwiseAnd(int left, int right) {
int shift = 0;
while (left != right) {
left >>= 1;
right >>= 1;
shift++;
}
return left << shift;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.rangeBitwiseAnd(5, 7)); // 4
}
}
def range_bitwise_and(left, right):
shift = 0
while left != right:
left >>= 1
right >>= 1
shift += 1
return left << shift
# Example usage
print(range_bitwise_and(5, 7)) # 4
function rangeBitwiseAnd(left, right) {
let shift = 0;
while (left !== right) {
left >>>= 1;
right >>>= 1;
shift++;
}
return left << shift;
}
// Example usage
console.log(rangeBitwiseAnd(5, 7)); // 4
Explanation
- Initialize a counter
shiftto track the number of right shifts. - While
leftandrightare different, right-shift both by 1. - Increment
shiftfor each right shift. - When
leftequalsright, the common prefix of the binary representations is found. - Left-shift the result by
shiftto restore the original bit positions.
Note
The time complexity is O(log n), where n is the maximum of
left and right, as we shift until the numbers converge. The space complexity is O(1). Use unsigned right shift in JavaScript to handle negative numbers correctly.
