【问题标题】:How to assess even and odd numbers using the bitwise operator &如何使用按位运算符 & 评估偶数和奇数
【发布时间】:2020-06-24 03:51:57
【问题描述】:

我正在尝试使用按位运算符 & 来评估数组中的数字是偶数还是奇数。

这是我的代码:

    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`);
        }
    });

将每个元素分别返回 0 或 1,这将评估一个数字是偶数还是奇数,但在这种情况下,它们都返回奇数。 这就是我得到的结果:

二进制中的1是1,是奇数

二进制的2是10,是奇数

二进制的4是100,是奇数

等等……

我哪里做错了?

【问题讨论】:

    标签: javascript loops foreach binary


    【解决方案1】:

    这里的操作顺序很重要(由operator precedence 定义)。 & 出现在 === 比较之后,因此您的 if 语句实际上计算如下:

    if (parseInt(el.toString(2)) & (1 === 0)) {
    

    首先执行1===0。这将导致if(<num> & false),其中false 被转换为数值0,因为它在按位& 运算符的上下文中使用。因此,<num> & 0 将始终评估为 0,这是一个 falsy value(因此总是导致 else 块触发)。

    相反,您可以使用括号来强制执行顺序:

    arr = [1, 2, 4, 6, 9, 11, 18, 361, 5622, 5623]
    arr.forEach(function(el) {
      if ((el & 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`);
      }
    });

    您也可以直接在您的号码上使用& 运算符(因此无需在其上使用 toString)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多