按位运算但意义是什么(Espruino)

时间:2014-06-16 07:59:24

标签: javascript bit-manipulation

这行代码的含义是什么

n = (n<<1) | ((d>=0.0004)?1:0);

尝试在函数sigOff()中理解此处的代码 http://www.espruino.com/Remote+Control+Sockets

1 个答案:

答案 0 :(得分:1)

此代码段似乎使用bitwise OR(|)和左移(<<)运算符:

  

按位OR:a | b;
  在每个位位置返回一个位,其中一个或两个操作数的相应位为1。
  左移:a << b;
  向左移位二进制表示b(&lt; 32)位,从右移零。

1<< 1)的左移基本上是n的值的两倍。
然后,或(|)基本上&#34;添加&#34;如果1,则d >= 0.0004会导致结果不均匀 如果d < 0.0004,则左移的结果不会更改。

因此,对于n == 3d == 0.0004,会发生这种情况:

n << 1          // 6
(d>=0.0004)?1:0 // 1
6 | 1           // 7

对于n == 5d == 0.0002,会发生这种情况:

n << 1          // 10
(d>=0.0004)?1:0 // 0
10 | 0          // 10