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

为什么这个“4 | 2 | 4 | 1 | 10”在JavaScript中返回15?,javascript,Javascript,我只是在试验,试着把它放在控制台上: 4 | 2 | 4 | 1 | 10 在控制台中返回15 4 | 2 | 4 | 3 | 1 在控制台中返回7 4 | 2 | 4 | 3 | 1 我在Chrome和Firefox上试过了 为什么? 我刚开始学习JavaScript。。。也许我这里遗漏了一个概念?您使用的是 如果你想要一个真/假或,你会想要| | 您正在使用 如果你想要一个真/假或,你会想要| | JavaScript中的|运算符是一个。所以它在你给它的位上做OR运算,结果是15 A获

我只是在试验,试着把它放在控制台上:

4 | 2 | 4 | 1 | 10
在控制台中返回15

4 | 2 | 4 | 3 | 1
在控制台中返回7

4 | 2 | 4 | 3 | 1
我在Chrome和Firefox上试过了

为什么?

我刚开始学习JavaScript。。。也许我这里遗漏了一个概念?

您使用的是

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

您正在使用

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

JavaScript中的|运算符是一个。所以它在你给它的位上做OR运算,结果是15

A获取值中的每一位,如果设置了该位置的任一输入位,则在结果中设置相应的位。所以

4 is 0100 in binary 2 is 0010 4 is 0100 1 is 0001 10 is 1010 ---- 1111 = 15 decimal 更新:在对你的问题的评论中,你说你期望的是真的而不是15。如果是这样的话,您需要的是逻辑OR运算符| |,而不是位运算符,尽管| |也可能会让您惊讶于它返回的4 | | | 2 | | 4 | | 1 | | | 10=4,而不是JavaScript的逻辑OR运算符,这在许多其他语言中更是如此。所以它在你给它的位上做OR运算,结果是15

A获取值中的每一位,如果设置了该位置的任一输入位,则在结果中设置相应的位。所以

4 is 0100 in binary 2 is 0010 4 is 0100 1 is 0001 10 is 1010 ---- 1111 = 15 decimal 更新:在对你的问题的评论中,你说你期望的是真的而不是15。如果是这样的话,您需要的是逻辑OR运算符| |,而不是按位运算符,尽管| |也可能会让您惊讶于它返回的4 | | | 2 | | 4 | | 1 | | | 10=4,而不像JavaScript的逻辑OR运算符那样是按位OR运算符。

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

例如,让我们看看3 | 10的作用:

3在二进制中是11。 10是二进制的1010

把它们排成一行,你就可以

3      - 0011
10     - 1010
Result - 1011
结果1011是十进制的11,因此本例的结果是11

这是你问题4 | 2 | 4 | 1 | 10中的一个例子

1111是15的二进制数,这是你得到的结果

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

运算符是按位or运算符

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

例如,让我们看看3 | 10的作用:

3在二进制中是11。 10是二进制的1010

把它们排成一行,你就可以

3      - 0011
10     - 1010
Result - 1011
结果1011是十进制的11,因此本例的结果是11

这是你问题4 | 2 | 4 | 1 | 10中的一个例子

1111是15的二进制数,这是你得到的结果


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

你期望它返回什么,为什么?你期望它返回什么?我从来没有像下面提到的其他人那样使用过位运算符。。就我个人而言,我期望“true”,但这是JavaScript,所以我还不习惯它的概念和怪癖。你期望它返回什么,为什么?你期望它返回什么?我从来没有像下面提到的其他人那样使用过位运算符。。就我个人而言,我期待“真”,但这是JavaScript,所以我还不习惯它的概念和怪癖。是的。。。在二进制中,它很有意义:0100 | 0010 | 0100 | 0001 | 1010=1111=15@JanCarloViray:大概有几百万。位运算在计算中非常流行。在使用JavaScript的web浏览器的典型环境中,可能不那么流行,但我确信有一些。当然,当JavaScript在其他环境中使用时,比如NodeJ,在NodeJ中,您可以执行诸如打开文件之类的操作,并使用|组合各种文件模式标志。对事实上,在任何嵌入式编程书籍/课程中,使用OR和有效地进行位屏蔽都是第一件要教的事情。。。在二进制中,它很有意义:0100 | 0010 | 0100 | 0001 | 1010=1111=15@JanCarloViray:大概有几百万。位运算在计算中非常流行。在使用JavaScript的web浏览器的典型环境中,可能不那么流行,但我确信有一些。当然,当JavaScript在其他环境中使用时,比如NodeJ,在NodeJ中,您可以执行诸如打开文件之类的操作,并使用|组合各种文件模式标志。对事实上,使用OR和有效地进行位掩蔽是taugh的首要任务之一
t在任何嵌入式编程书/class.Note中,使用逻辑| |运算符不会导致这些整数操作数为true或false。这两种情况都只会导致4我知道,但是,如果他想要真/假。@DhaivatPandya:再说一遍,Phil的观点是| |也不会给你真或假。啊,现在我又读了一遍,这是有意义的。我想说的是,如果你想知道某些事情在英语意义上的or时是否为真,你不想使用位运算符。注意,使用逻辑| |运算符不会导致这些整数操作数为真或假。这两种情况都只会导致4我知道,但是,如果他想要真/假。@DhaivatPandya:再说一遍,Phil的观点是| |也不会给你真或假。啊,现在我又读了一遍,这是有意义的。我想说的是,如果你想知道英语意义上的or时,某些事情是否真实,你不想使用位运算符。