按位操作符

按位操作符

按位操作符是将操作数当做32为的比特序列(0和1组成),按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值.

运算符 用法 描述
按位与( AND) a & b 对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。
按位或(OR) a I b 对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。
按位异或(XOR) a ^ b 对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。
按位非(NOT) ~ a 反转操作数的比特位,即0变成1,1变成0。
左移 a << b a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
有符号右移 a >> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位。
无符号右移 a >>> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。

有符号的32位整数

所有的按位操作符都会被转成补码形式的有符号的32位整数.补码形式是指一个数的负对应值为数值的所有比特位反转后再加1.反转比特位即该数值进行"非"位运算,也即该数值的反码.
314的二进制编码

00000000000000000000000100111010

下面编码~314,即314的反码

11111111111111111111111011000101

最后,下面编码 -314,即 314 的补码(反转后+1):

11111111111111111111111011000110

补码保证了当一个数是正数时,其最左的比特位是0,当一个数是负数时,其最左的比特位是1。因此,最左边的比特位被称为符号位(sign bit)。

0是所有比特位都由数字0组成的整数

0 (base 10) = 00000000000000000000000000000000 (base 2)

-1是所有比特位都由数字1组成的整数

-1 (base 10) = 11111111111111111111111111111111 (base 2)

-2147483648(十六进制形式:-0x80000000)是除了最左边为1外,其他比特位都为0的整数。

-2147483648 (base 10) = 10000000000000000000000000000000 (base 2)

2147483647(十六进制形式:0x7fffffff)是除了最左边为0外,其他比特位都为1的整数。

2147483647 (base 10) = 01111111111111111111111111111111 (base 2)

按位逻辑操作符

从概念上讲,按位逻辑操作符遵循下面规则:

  • 操作数被转换成32位整数,用比特序列(0和1组成)表示,超过32的数字会被丢弃.
转换前: 11100110111110100000000000000110000000000001
转换后:             10100000000000000110000000000001
  • 第一个操作数的每个比特位与第二个操作数的相应比特位匹配:第一位对应第一位,第二位对应第二位,以此类推.
  • 位运算符应用到每对比特位,结果是新的比特值.

&按位与

对每对比特位执行与操作.只有a和b都是1时,a AND b才是1,否则为0.
如下:

a b a AND b
0 0 0
0 1 0
1 0 0
1 1 1
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)

将任一数值 x 与 0 执行按位与操作,其结果都为 0。将任一数值 x 与 -1 执行按位与操作,其结果都为 x.

|按位或

对每一对比特位执行或操作,如果a或b中至少一个为1,结果为1,否则为0.

a b a OR b
0 0 0
0 1 1
1 0 1
1 1 1
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001111 (base 2) =  15(base 10)

将任一数值 x 与 0 进行按位或操作,其结果都是 x。将任一数值 x 与 -1 进行按位或操作,其结果都为 -1。

你可能感兴趣的:(按位操作符)