这些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, xoror 。 你可以想到&| 作为&&||的对应物 除了将它们的操作数视为位向量,并对每个位执行逻辑运算。 没有^^运算符,但是这个运算是“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