javascript - 使两位数相等
问题描述
当我偶然发现一个问题以找出更改的位数或具体时,我正在经历编码挑战
计算要翻转的位数以将 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++
}
所以,基于此,我有两个问题
我怎样才能使
console.log(xorOfAandBToBits)
等于console.log(num1ToBits)
更好的交替完成任务
解决方案
您只需要检查数组中是否设置了某个位(您也可以只取字符串,无需拆分):
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;