为什么这个“4 | 2 | 4 | 1 | 10”在JavaScript中返回15?

时间:2012-02-22 03:03:00

标签: javascript

我只是在试验并尝试将其放入控制台:

4 | 2 | 4 | 1 | 10

在控制台中返回 15

4 | 2 | 4 | 3 | 1

在控制台中返回 7

我在Chrome和Firefox上试过了。

为什么吗

我刚开始学习JavaScript ......也许我在这里错过了一个概念?

3 个答案:

答案 0 :(得分:6)

JavaScript中的|运算符是bitwise integer OR operator。所以它对你给它的位进行OR运算,得到15。

如果设置了该位置的输入位的 ,则bitwise OR operation取值中的每一位并设置结果中的相应位。所以

4  is 0100 in binary
2  is 0010
4  is 0100
1  is 0001
10 is 1010
      ----
      1111 = 15 decimal

更新:在对您的问题发表评论时,您说您期待true而不是15。如果是这样,您需要逻辑 OR运算符||,而不是按位运算符,尽管||也可能会让您惊讶于它返回的内容(4 || 2 || 4 || 1 || 10 = 4,而不是true),因为JavaScript的逻辑OR(||)是curiously powerful,比其他许多语言都要多。

答案 1 :(得分:3)

您使用的是OR operation

如果你想要一个真/假,或者你想要||。

答案 2 :(得分:2)

|运算符是按位或运算符。

|运算符将每个操作数的二进制数字对齐,如果该地方有一个或两个操作数都有1,则返回1

例如,让我们看看3 | 10做了什么:

3是二进制的11。 二进制文件101010

排队,你得到

3      - 0011
10     - 1010
Result - 1011

结果1011为十进制11,因此此示例的结果为11

以下是您的问题4 | 2 | 4 | 1 | 10

中的一个示例
 4 - 0100
 2 - 0010
 4 - 0100
 1 - 0001
10 - 1010
 | ======
     1111

111115的二进制,这是你得到的结果。

按位或运算符以及其他bit manipulation operators通常用于低级计算。例如,您可以使用按位运算符完全实现乘法,加法和除法等算法。