【发布时间】:2014-03-24 00:24:29
【问题描述】:
我在浏览器控制台上检查某些内容时不小心使用了 | 而不是 || ( OR )。
这个操作符的功能是什么?我做了一些谷歌搜索,但没有任何相关内容。
2 | 4
6
1 | 2
3
4 | 5
5
8|10
10
8 | 10
10
10 | 8
10
2 || 4
2
【问题讨论】:
标签: javascript operators
我在浏览器控制台上检查某些内容时不小心使用了 | 而不是 || ( OR )。
这个操作符的功能是什么?我做了一些谷歌搜索,但没有任何相关内容。
2 | 4
6
1 | 2
3
4 | 5
5
8|10
10
8 | 10
10
10 | 8
10
2 || 4
2
【问题讨论】:
标签: javascript operators
它是按位或。 如果设置了两个位中的一个,它会逐位检查输出位设置 (1) 的两个操作数中的每个位。
例如:var test = 5 | 3
5 -> 101(这里忽略前导零)
3 -> 011
那么测试将是 7 (111)
【讨论】:
| (按位或)
对每对位执行 OR 运算。如果 a 或 b 为 1,则 a OR b 的结果为 1。事实 OR 运算的表是:
a b a OR b
0 0 0
0 1 1
1 0 1
1 1 1
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
--------------------------------
14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)
将任意数 x 与 0 进行按位或运算得到 x。
将任意数字 x 与 -1 进行按位或运算得到 -1。
来源MDN
【讨论】:
二进制或
0 或 0 -> 0
0 或 1 -> 1
1 或 0 -> 1
1 或 1 -> 1
(容易记住 - 0 OR 0 给出 0。任何其他情况给出 1)
如果你有例如4 |二进制形式的 1 -> 4 是 100,1 是 001。然后 100 | 001 -> 101(或十进制的 5)
此外,逻辑 OR (||) 仅处理您的左右值以及 1 和 0,其工作原理与上述相同。
【讨论】:
该 |是按位或而不是布尔或 ||
这意味着它将对每个位进行 OR 运算,例如 2 是二进制 10,4 是二进制 100,结果为 110。
如果你用二进制数计算上面的所有结果,你会看到。
这对于位掩码或评估标志很有用。如果您在靠近硬件的地方进行编程,则在设置寄存器位或在通信时解析协议数据时经常会发现这一点。
if (myVar | 0x2 > 0) {
// Bit two is set!
}
当然还有其他用途。
还有一个按位与 & 以相同的方式工作,但与位相加。
【讨论】:
虽然 ||是布尔逻辑或 |是按位或。
4 I 5 = 100 | 101 = 101 = 5
【讨论】: