跳到主要内容

位运算

201. 数字范围按位与

给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。



示例 1

输入:left = 5, right = 7
输出:4
示例 2

输入:left = 0, right = 0
输出:0
示例 3

输入:left = 1, right = 2147483647
输出:0

解法1 结果是 left 和 right 找到二进制位的公共前缀 这时候left 和right 已经相等了 1、都同步向右移 2、记录移动的次数 3、再向左移动刚刚向右移动的次数

/**
* @param {number} left
* @param {number} right
* @return {number}
*/
var rangeBitwiseAnd = function (left, right) {
let shift = 0;
while (left != right) {
left >>= 1;
right >>= 1;
++shift;
}
return left << shift;
};