这些JavaScript按位运算符是做什么的?
x <<= y (x = x << y)
-
x >>= y (x = x >> y)
-
x >>>= y (x = x >>> y)
-
x &= y (x = x & y)
-
x ^= y (x = x ^ y)
-
x |= y (x = x | y)
这些不同的运营商是做什么的?
<<, >>
左移位和右移位 。 如果将左操作数想象为二进制位序列,那么将右操作数指示的位数向左或向右移动 。
&, ^, |
这些分别是bitwise, xor和or 。 你可以想到&
和|
作为&&
和||
的对应物 除了将它们的操作数视为位向量,并对每个位执行逻辑运算。 没有^^
运算符,但是这个运算是“xor”或“ exclusive or ”。 你可以把“a或b”看作“a或b,但不是两个”。
按位运算符
这是一个试图让事情变得简单的初学者。
先决条件
您必须熟悉二进制数字系统(由两位数字组成的数字)。 如果你不是,那么首先检查这个链接: https : //www.mathsisfun.com/binary-number-system.html 。 以防万一以前的链接中断,这个答案可能会有所帮助: https : //stackoverflow.com/a/32155850/1636522 。
事实上,为了弄清楚这些操作员是如何工作的,你需要知道在操作中涉及的数字之后的哪个位序列。 之后,你应该能够理解以下的东西。
提醒
十进制数字及其二进制表示法:
0 0 | 5 101 1 1 | 6 110 2 10 | 7 111 3 11 | 8 1000 4 100 | 9 1001
>>>
, >>
和<<
做什么?
这些操作员将位序列向左或向右移动。
decimal | binary decimal | binary ---------|--------- ---------|--------- 9 | 1001 2 | 10 >> 2 | >> 2 << 2 | << 2 = 2 | = 10 = 8 | = 1000
什么&
, |
和^
做?
这些运营商结合两个数字的位来创建一个新的号码。
decimal | binary decimal | binary decimal | binary ---------|-------- ---------|-------- ---------|-------- 5 | 101 5 | 101 5 | 101 & 6 | & 110 | 6 | | 110 ^ 6 | ^ 110 = 4 | = 100 = 7 | = 111 = 3 | = 011
如何工作?
对于每对比特:如果两个比特中的至少一个为0,则结果比特为0.如果两个比特都不是0,则结果比特是1。
101 bit 3 | bit 2 | bit 1 & 110 -------|-------|------- = 100 1 | 0 | 1 & | & | & 1 | 1 | 0 = | = | = 1 | 0 | 0
如何|
工作?
对于每对比特:如果两个比特中的至少一个是1,则结果比特是1.如果两个比特都不是1,则结果比特是0。
101 bit 3 | bit 2 | bit 1 | 110 -------|-------|------- = 111 1 | 0 | 1 | | | | | 1 | 1 | 0 = | = | = 1 | 1 | 1
^
如何工作?
对于每对比特:如果两个比特不同,则得到的比特是1.如果两个比特相同,则结果比特是0。
101 bit 3 | bit 2 | bit 1 ^ 110 -------|-------|------- = 011 1 | 0 | 1 ^ | ^ | ^ 1 | 1 | 0 = | = | = 0 | 1 | 1