用跛脚的话来说,按位是什么| 运算符在 Javascript 中执行,为什么是:
8 | 1 ; //9
二进制中的8 = 1000
二进制中的 1 = 0001
如果你取每个二进制数字并将它们视为 if 语句(1 为真,0 为假),你会得到:
1 || 0 = 1
0 || 0 = 0
0 || 0 = 0
0 || 1 = 1
结果是 1001,即十进制的 9
如果它是 8 和 1,它会是这样的:
1 && 0 = 0
0 && 0 = 0
0 && 0 = 0
0 && 1 = 0
结果是0
下面是一个快速示例,说明如何使用这些:
如果您想组合掩码,您将使用 OR 运算符 -
使用文件权限的示例,您可能具有以下标志:
1st bit - execute (bin - 001, dec - 1)
2nd bit - write (bin - 010, dec - 2)
3rd bit - read (bin - 100, dec - 4)
如果你想创建一个用于读取和执行的掩码,你会做类似read value | execute value
which is 1 | 4
which would give you 5
(101 in bin)
现在您有了一个掩码,您可以使用&
运算符检查文件的权限以查看它是否具有这两个权限:
示例文件 1(已读取、写入和执行)
它的权限值为 7(bin 中的 111):111 & 101 = 101,所以它确实有这些权限
示例文件 2(已读取和写入)
它的权限值为 6(bin 中的 110):110 & 101 = 100,所以它只有 mask 提供的两者中的 100(4 in dec)perms(读取)
计算机上的所有值都以二进制格式存储在硬件上。
1 = 0001
2 = 0010
3 = 0011
4 = 0100
etc.
|
是 OR 运算符,它结合了两个值的所有位:
8 - 1000
1 = 0001
--------
9 = 1001
|
运算符是按位或。
8(以 10 为底)是 1000(以 2 为底;二进制)。1 是 0001
所以,8 | 1(以 10 为底)等于 1000 | 0001 二进制,即 1001 二进制,即 9(以 10 为底)。
它采用两个数字的二进制表示,并找到它们之间的并集(“或”)。
考虑一下你给的两个:
binary(8) = 1000
binary(1) = 0001
因此,如果第一个数字 (8) 或第二个数字 (1) 中的某个位为 1,或者两者都为 1,则将其传递到结果中。
所以, 8 | 1 = 9
, 因为1001
二进制是“或”运算的结果,十进制是 9
好吧,在您的示例中,采用二进制表示:
8 = 0b1000
1 = 0b0001
然后对每个位应用逻辑或(因此“按位”):对于每个位,如果其中一个、另一个或两者都为 1,则结果为 1,否则结果为 0。
8|1 = 0b1001
这是9。