javascript - 按位 - 为什么 0 & 1 !== 1 & 1 在 VSCode/Leetcode 中返回 false?
问题描述
我正在编写一个算法来使用这个函数比较两个数字之间有多少位不同
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
and 0100
。它返回 2 而不是 3。
https://i.imgur.com/P46RyZr.png
我可以使用XOR
而不是!==
得到正确答案。但我想知道为什么?
解决方案
您的问题是!==
优先级高于&
. 所以你的条件实际上是(x & (1 !== y)) & 1
。改为使用显式分组:
if ((x & 1) !== (y & 1)) result++;
它适用,^
因为它的优先级低于&
.
推荐阅读
- css - CSS 没有出现
- python - 附加 if 条件 (elif) 在 while 循环中不起作用
- regex - 正则表达式匹配消息中的单词
- python - 我无法理解如何用括号划分和输入结果
- php - 如何覆盖虚拟主机的 Apache ErrorLog
- php - 使用更新表的 IF 条件创建触发器的正确语法是什么?
- html - 如何使 Bootstrap 4 滑块中的图像响应?
- java - 有没有办法解决这个问题:第 45 行第 7 列路径 $.client[0].services 的预期名称
- node.js - 将 Discord 中的用户移至特定频道
- java - 我正在尝试从 Android 设备获取光传感器数据以在 Unity 应用程序中使用