And*_* D_ 3 javascript binary foreach loops
我正在尝试使用按位运算符 & 来评估数组中的数字是偶数还是奇数。
这是我的代码:
arr = [1, 2, 4, 6, 9, 11, 18, 361, 5622, 5623]
arr.forEach(function (el) {
if (parseInt(el.toString(2)) & 1 === 0) {
console.log(`${el} in binary is ${el.toString(2)} and it is an EVEN number`);
} else {
console.log(`${el} in binary is ${el.toString(2)} and it is an ODD number`);
}
});
Run Code Online (Sandbox Code Playgroud)
单独取每个元素,每个元素返回 0 或 1,这将评估一个数字是偶数还是奇数,但在这种情况下,它们都返回奇数。这是我得到的结果:
二进制中的 1 是 1,它是一个奇数
二进制中的 2 是 10,它是一个奇数
二进制中的 4 是 100,它是一个奇数
等等...
我哪里做错了?
操作顺序在这里很重要(并且由运算符优先级定义)。在&后出现===这样的if语句实际上评估等相比,:
if (parseInt(el.toString(2)) & (1 === 0)) {
Run Code Online (Sandbox Code Playgroud)
哪里1===0先执行。这将导致if(<num> & false), wherefalse转换为数值,0因为它在按位运算&符的上下文中使用。因此,<num> & 0将始终评估为0,这是一个假值(因此总是导致-blockelse触发)。
相反,您可以使用括号来强制执行顺序:
if (parseInt(el.toString(2)) & (1 === 0)) {
Run Code Online (Sandbox Code Playgroud)
您也可以&直接在您的号码上使用运算符(因此无需在其上使用 toString)