首页 > 解决方案 > 使两位数相等

问题描述

当我偶然发现一个问题以找出更改的位数或具体时,我正在经历编码挑战

计算要翻转的位数以将 A 转换为 B

现在,对于 W3C 学校,我发现我们可以进行异或运算

const num1 = 10 
const num2 = 20 
const xorAandB = num1 ^ num2 //this would give 30 
console.log(xorAandB) 
const xorOfAandBToBits = xorAandB.toString(2) 
console.log(xorOfAandBToBits) //11110 (5 numbers)
const num1ToBits = num1.toString(2)
console.log(num1ToBits) //(4 numbers)

我最初的想法是,一旦我对他们两个都有位,我可以运行一个 for 循环来查看位已更改

const num1ToBitsArray = num1ToBits.split('') 
const xorBitsNumberToArray = xorOfAandBToBits.split('')
let count = 0
for (let i=0; i<num1ToBitsArray.length; i++) {
if (xorBitsNumberToArray[i] !== num1ToBitsArray[i]) count++ 
}

所以,基于此,我有两个问题

  1. 我怎样才能使console.log(xorOfAandBToBits)等于console.log(num1ToBits)

  2. 更好的交替完成任务

标签: javascript

解决方案


您只需要检查数组中是否设置了某个位(您也可以只取字符串,无需拆分):

 if(xorBitsNumberToArray[i] === "1") count++;

如果 xor 返回例如“1101”,则意味着 3 位不同,因此您实际上必须计算设置的位数。


或者我会这样做:

 const difference = a ^ b;
 let count = 0;

 for(let i = 0; i < 32; i++)
   count += (difference >> i) & 1;

推荐阅读