假设我有2个数字,例如1和2。它们的二进制表示形式是'01'和'10',所以它们的位差是2。对于数字5和7,二进制表示形式是'101'和'111',所以位差是1。将数字转换为二进制,然后循环查找差异,但是有没有更简单的方法呢?

最佳答案

您可以使用按位XOR(^)来识别位不同的位置,将结果转换为字符串,然后计算字符串中1出现的次数:

const bitDiffCount = (a, b) => {
  const bitStr = ((a ^ b) >>> 0).toString(2);
  return bitStr.split('1').length - 1;
};

console.log(bitDiffCount(5, 7));
console.log(bitDiffCount(1, 2));
console.log(bitDiffCount(16, 16));
console.log(bitDiffCount(16, 17));
console.log(bitDiffCount(16, 18));
console.log(bitDiffCount(16, 19));

关于javascript - 如何在JavaScript中找到两个数字之间的位差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50479322/

10-09 13:16