-1

谁能解释一下这条线是如何工作的。

 a & 3 || (b, c)

第一部分是否翻译为:

 a = a & 3;

或者那是一个三元代码,如果返回真 b,否则 c?谢谢

4

4 回答 4

2

我认为第一部分是按位和 3。如果这是真的,请返回。

否则,它将c基于逗号运算符返回。

if (a & 3 != false)
   return a & 3;
else
   return c;
于 2012-10-30T13:20:05.683 回答
2

那不是三元运算符。工作方式a || ba被评估,如果a强制返回truea返回,否则b被评估并返回。&是按位与。表达式的第二部分意义不大,但我相信它会返回c.

所以意思是:“如果按位和 3 不是 0 则返回那个,否则返回 c”。从这个意义上说,它的行为确实有点像三元运算符......并且a保持不变。

于 2012-10-30T13:22:09.780 回答
2

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

相反,a & 3是 0,所以返回(b, c),即c

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

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

a%4||c

这清楚地表明了操作的周期性。

于 2012-10-30T13:22:50.877 回答
1

(术语说明:在1 + 2中,1 和 2 是“操作数”,+ 是“运算符”)

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

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

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

a所以,用简单的英语:取with的按位“与” 3(二进制为 11),这意味着结果值将是 0、1、2 或 3 之一,具体取决于a. 如果它不为零,则返回该值。否则,返回c,但b也将被评估。

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

于 2012-10-30T13:20:41.353 回答