按位 - 为什么 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,结果我的函数在比较最左边的数字时出错,比如00110100。它 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++;

它适用于 ^,因为它的优先级低于 &