JS位运算符

时间:2020-02-23 14:33:48  来源:igfitidea点击:

在本教程中,我们将学习JavaScript逐位运算符。

我们使用位运算符来处理位(0和1)。

点击这里学习布尔代数教程。
单击此处查看逻辑门教程。

下面是位运算符列表。

运算符符号示例
&x&y
|x
取反~~x
异或者^x^y
左移<<2<<1
符号传播右移>>2>>1
带填充零的右移>>>2>>1

32位有符号整数

按位运算符的操作数在2的补码中转换为32位有符号整数。

两个补码的最后一位是"符号位"。
正数为0,负数为1.

我们可以用32位表示的数字是从-2147483648到2147483647.

公式:-2(32-1)到2(32-1)1

如何将十进制整数(以10为基数)转换成二进制(以2为基数)?

单击此处获取十进制到二进制转换教程。

假设我们有一个十进制的数字4,即以10为基数。
所以,在二进制中,它将被表示为(100)2,以2为底。 4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)

如何在二的补码中转换十进制数?

将十进制数转换成2的补码的步骤。

  • 将十进制数转换成二进制数

  • 反转二进制位(1的补码)

  • 给1的补码加1得到2的补码

把4转换成2的补码。

Step 1: Decimal to Binary
---------------------------
4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)

Step 2: Compute 1's complement by inverting bits
--------------------------------------------------
    00000000 00000000 00000000 00000100
    11111111 11111111 11111111 11111011 (1's complement)

Step 3: Compute 2's complement from 1's complement by adding 1
----------------------------------------------------------------
    11111111 11111111 11111111 11111011 (1's complement)
                                     +1
   ------------------------------------
    11111111 11111111 11111111 11111100 (2's complement)

按位与&

只有当x和y的值都为1时,才会得到1.

Bitwise AND
      4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
      6 (base 10) = 00000000 00000000 00000000 00000110 (base 2)
 ---------------------------------------------------------------
  4 & 6 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
                  = 4 (base 10)

JS代码 console.log(4 & 6); //this will print 4

按位或者|

如果x或者y的值为1,则得到1.

Bitwise OR
      4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
      6 (base 10) = 00000000 00000000 00000000 00000110 (base 2)
 ---------------------------------------------------------------
  4 | 6 (base 10) = 00000000 00000000 00000000 00000110 (base 2)
                  = 6 (base 10)

JS代码 console.log(4 | 6); //this will print 6

按位NOT~

这将使钻头反转。

Bitwise NOT
      4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
 ---------------------------------------------------------------
     ~4 (base 10) = 11111111 11111111 11111111 11111011 (base 2)
                  = -5 (base 10)

任意数N的按位非产生-(N+1)。
例如:~10=-11(以10为基数)

JS代码 console.log(~4); //this will print -5

按位异或者^

如果x和y的值不同,这将得到1.

Bitwise XOR
      4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
      6 (base 10) = 00000000 00000000 00000000 00000110 (base 2)
 ---------------------------------------------------------------
  4 ^ 6 (base 10) = 00000000 00000000 00000000 00000010 (base 2)
                  = 2 (base 10)

JS代码 console.log(4 ^ 6); //this will print 2

左移<<

这会将第一个操作数的位向左移到指定的位数。

Left shift
      4 (base 10) = 00000000 00000000 00000000 00000100 (base 2)
 ---------------------------------------------------------------
 4 << 2 (base 10) = 00000000 00000000 00000000 00010000 (base 2)
                  = 16 (base 10)

JS代码 console.log(4 << 2); //this will print 16

符号传播右移>>

这会将第一个操作数的位向右移动到指定的位数。

Sign propagating right shift
      8 (base 10) = 00000000 00000000 00000000 00001000 (base 2)
 ---------------------------------------------------------------
 8 >> 2 (base 10) = 00000000 00000000 00000000 00000010 (base 2)
                  = 2 (base 10)

JS代码 console.log(8 >> 2); //this will print 2

Sign propagating right shift
     -4 (base 10) = 11111111 11111111 11111111 11111100 (base 2)
----------------------------------------------------------------
-4 >> 1 (base 10) = 11111111 11111111 11111111 11111110 (base 2)
                  = -2 (base 10)

JS代码 console.log(-4 >> 1); //this will print -2

右移填充零>>>

这会将第一个操作数的位向右移动到指定的位数,并将前导零相加。

Right shift with fill zero
       8 (base 10) = 00000000 00000000 00000000 00001000 (base 2)
 ---------------------------------------------------------------
 8 >>> 2 (base 10) = 00000000 00000000 00000000 00000010 (base 2)
                   = 2 (base 10)

JS代码 console.log(8 >>> 2); //this will print 2

Right shift with fill zero
      -4 (base 10) = 11111111 11111111 11111111 11111100 (base 2)
----------------------------------------------------------------
-4 >>> 1 (base 10) = 01111111 11111111 11111111 11111110 (base 2)
                   = 2147483646 (base 10)

JS代码 console.log(-4 >>> 1); //this will print 2147483646