这是三元还是按位?

时间:2012-10-30 13:17:21

标签: javascript

任何人都可以解释这条线是如何工作的。

 a & 3 || (b, c)

第一部分是否转换为:

 a = a & 3;

或者是三元代码,如果返回true b,否则c?感谢

4 个答案:

答案 0 :(得分:2)

我认为第一部分是按位而且是3.如果那是真的,那就回去吧。

否则,它将根据逗号运算符返回c

if (a & 3 != false)
   return a & 3;
else
   return c;

答案 1 :(得分:2)

那不是三元运营商。 a || b的工作方式是评估a,如果a强制true,则返回a,否则会评估b并返回&c是按位的。表达式的第二部分不是很有意义,但我相信它会返回a的值。

所以意思是:“如果按位且3不为0则返回,否则返回c”。在这种意义上,它的行为有点像三元运算符......并且{{1}}保持不变。

答案 2 :(得分:2)

如果a的二进制写入的最后两位之一为“1”,则返回a&3

相反,a & 3为0,因此返回(b, c),即c

它的作用似乎很清楚,但我无法想象为什么......

如果a是正整数,则可以写为

a%4||c

清楚地显示了手术的周期性。

答案 3 :(得分:1)

(关于术语的注释:在1 + 2中,1和2是“操作数”而+是“操作符”)

该表达式中的第一个运算符(&)是按位'和':https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators

第二个运算符(||)是一个逻辑'或',如果它是真的(如果它会通过if检查),则返回第一个操作数,否则返回第二个操作数。

第三个(,)是逗号运算符,它只返回第二个操作数。

所以,用简单的英语:用a3(二进制为11)取符号'和',意味着得到的值将是0,1,2之一,或3,取决于a中前两位的值。如果不为零,则返回该值。否则,请返回c,但也会评估b

例如,如果a为2,那么a & 3将为10& 11 == 10(因为1& 1 == 1和0& 1 == 0),这是2和truthy(唯一的假数字是0或0.0),所以这将是整个表达式的返回值,甚至不会评估bc。另一方面,如果a为4,则a & 3将为100& 11 == 000,这是假的,因此将评估(b, c),结果将是c是返回值。

相关问题