Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用位运算符&;_Javascript_Loops_Foreach_Binary - Fatal编程技术网

Javascript 如何使用位运算符&;

Javascript 如何使用位运算符&;,javascript,loops,foreach,binary,Javascript,Loops,Foreach,Binary,我试图使用位运算符来评估数组中的数字是偶数还是奇数& 这是我的代码: 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 EVE

我试图使用位运算符来评估数组中的数字是偶数还是奇数&

这是我的代码:

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

等等


我哪里做错了?

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

if (parseInt(el.toString(2)) & (1 === 0)) {
其中,首先执行
1===0
。这将导致
if(&false)
,其中
false
转换为数值
0
,因为它在按位
运算符的上下文中使用。因此,
&0
将始终计算为
0
,这是一个(因此总是导致触发
else
-块)

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

arr=[1,2,4,6,9,11,18,361,5622,5623]
arr.forEach(功能(el){
如果((el&1)==0){
log(${el}在二进制中是${el.toString(2)},它是一个偶数`);
}否则{
log(${el}在二进制中是${el.toString(2)},它是一个奇数`);
}
});