什么是按位|操作者

时间:2012-12-09 21:43:53

标签: bit-manipulation bitwise-operators

用外行人的话说,什么是按位|运算符在Javascript中运行,为什么:

8 | 1 ; //9

5 个答案:

答案 0 :(得分:7)

8 in binary = 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 1 | 4这样的内容5,它会为您提供&(101 in bin)< / p>

现在您有了一个掩码,您可以使用{{1}}运算符检查文件的权限以查看它是否具有这两种权限:

示例文件1(具有读,写和执行)

其许可值为7(bin中为111):111&amp; 101 = 101,所以它确实有那些烫发

示例文件2(已读取和写入)

它的许可值是6(箱中110):110&amp; 101 = 100,因此它只有掩码中提供的两个(4个十进制)烫发(读取)

答案 1 :(得分:2)

|运算符是按位OR。

8(基数10)为1000(基数2;二进制)。 1是0001

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

答案 2 :(得分:2)

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

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

|是OR操作符,它组合了两个值的所有位:

8 - 1000
1 = 0001
--------
9 = 1001

答案 3 :(得分:1)

嗯,在你的例子中,采用二进制表示:

8 = 0b1000
1 = 0b0001

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

8|1 = 0b1001

这是9。

答案 4 :(得分:1)

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

考虑你给的两个:

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

因此,如果第一个数字(8)或第二个数字(1)中的位为1,或者两者中的位数均为1,那么它将被结转到结果中。

所以,8 | 1 = 9,因为二进制中的1001是“或”操作的结果,并且是十进制的9