如何使用按位运算符 & 评估偶数和奇数

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,它是一个奇数

等等...

我哪里做错了?

Nic*_*ons 5

操作顺序在这里很重要(并且由运算符优先级定义)。在&后出现===这样的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)