JS位运算符
在本教程中,我们将学习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