按位 - 为什么 0 & 1 !== 1 & 1 return 在 VSCode/Leetcode 中为假?
Bitwise - Why 0 & 1 !== 1 & 1 return false in VSCode/Leetcode?
我正在编写一个算法来使用此函数比较两个数字之间有多少位不同
var hammingDistance = function(x, y) {
let result = 0;
while (x !== 0 || y !== 0) {
// This line is incorrect
if (x & 1 !== y & 1) result++;
x = x >> 1;
y = y >> 1;
}
return result;
};
但是我的结果总是比正确答案少1
,结果我的函数在比较最左边的数字时出错,比如0011
和0100
。它 returns 2 而不是 3.
https://i.imgur.com/P46RyZr.png
我可以使用 XOR
而不是 !==
来获得正确答案。但我想知道为什么?
你的问题是!==
has a higher precedence than &
。所以你的条件其实是(x & (1 !== y)) & 1
。改用显式分组:
if ((x & 1) !== (y & 1)) result++;
它适用于 ^
,因为它的优先级低于 &
。
我正在编写一个算法来使用此函数比较两个数字之间有多少位不同
var hammingDistance = function(x, y) {
let result = 0;
while (x !== 0 || y !== 0) {
// This line is incorrect
if (x & 1 !== y & 1) result++;
x = x >> 1;
y = y >> 1;
}
return result;
};
但是我的结果总是比正确答案少1
,结果我的函数在比较最左边的数字时出错,比如0011
和0100
。它 returns 2 而不是 3.
https://i.imgur.com/P46RyZr.png
我可以使用 XOR
而不是 !==
来获得正确答案。但我想知道为什么?
你的问题是!==
has a higher precedence than &
。所以你的条件其实是(x & (1 !== y)) & 1
。改用显式分组:
if ((x & 1) !== (y & 1)) result++;
它适用于 ^
,因为它的优先级低于 &
。