题目描述
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。
解题思路
- left到right中的所有数字按位与,其结果就是这些数字都为1的留下,其他全部置为0
- 既求left到right这些数字的公共前缀
- 将left和right每次右移一位,直到两数相等,得到公共前缀
- 再将结果左移回原来位置
代码实现
func rangeBitwiseAnd(left int, right int) int {
count := 0
for left != right {
left >>= 1
right >>= 1
count++
}
return left << count
}