-4

用跛脚的话来说,按位是什么| 运算符在 Javascript 中执行,为什么是:

8 | 1 ; //9
4

5 回答 5

7

二进制中的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 valuewhich is 1 | 4which 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(读取)

于 2012-12-09T21:45:57.083 回答
2

计算机上的所有值都以二进制格式存储在硬件上。

1 = 0001
2 = 0010
3 = 0011
4 = 0100
etc.

|是 OR 运算符,它结合了两个值的所有位:

8 - 1000
1 = 0001
--------
9 = 1001
于 2012-12-09T21:47:31.340 回答
2

|运算符是按位或。

8(以 10 为底)是 1000(以 2 为底;二进制)。1 是 0001

所以,8 | 1(以 10 为底)等于 1000 | 0001 二进制,即 1001 二进制,即 9(以 10 为底)。

于 2012-12-09T21:46:01.697 回答
1

它采用两个数字的二进制表示,并找到它们之间的并集(“或”)。

考虑一下你给的两个:

binary(8) = 1000
binary(1) = 0001

因此,如果第一个数字 (8) 或第二个数字 (1) 中的某个位为 1,或者两者都为 1,则将其传递到结果中。

所以, 8 | 1 = 9, 因为1001二进制是“或”运算的结果,十进制是 9

于 2012-12-09T21:48:24.707 回答
1

好吧,在您的示例中,采用二进制表示:

8 = 0b1000
1 = 0b0001

然后对每个位应用逻辑或(因此“按位”):对于每个位,如果其中一个、另一个或两者都为 1,则结果为 1,否则结果为 0。

8|1 = 0b1001

这是9。

于 2012-12-09T21:46:15.480 回答