You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么VSCode/力扣中0 & 1 !== 1 & 1返回false?JS汉明距离问题

问题根本原因

你代码出错的核心是JavaScript运算符优先级规则:严格不等运算符!==的优先级高于按位与运算符&,你写的判断语句if (x & 1 !== y & 1)没有按照你预期的逻辑执行。

你原本期望的运算顺序是:分别取x、y的最低位,再比较两个位是否不同,也就是等价于if ((x & 1) !== (y & 1))。但由于优先级差异,实际执行顺序是:

  1. 先运算1 !== y,得到布尔类型的结果
  2. 布尔值会被隐式转换为数字(true转1、false转0),再和x做按位与运算
  3. 最后将上一步的结果和1做按位与运算

这个错误的运算逻辑导致很多比特位差异没有被正确统计,所以最终结果会比正确值少,你测试的0011和0100就会漏算最高位的差异,得到2而非3。

修复方案

你可以选择两种方案修复问题:

  • 给按位与运算加括号,强制优先级符合预期:
if ((x & 1) !== (y & 1)) result++;
  • 用异或运算简化判断逻辑(两个比特位不同时异或结果为1,相同时为0,不需要额外做不等判断):
if ((x ^ y) & 1) result++;
优化写法参考

你还可以先对两个数做异或运算,再统计异或结果里1的个数,就是汉明距离,逻辑更简洁,循环次数更少:

var hammingDistance = function(x, y) {
  let diff = x ^ y;
  let count = 0;
  while (diff) {
    count += diff & 1;
    diff >>= 1;
  }
  return count;
};

内容的提问来源于stack exchange,提问作者Vagrant Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:36:04