按位非(NOT)

按位非NOT由(~)表示,返回数值的反码,本质是操作数的负值减1


按位与(AND)

按位与AND由和号(&)表示,直接对数字的二进制形式进行运算。数字对齐位运算规则,都为1时结果为1,否则为0

第一个数 第二个数 结果
1 1 1
1 0 0
0 1 0
0 0 0

按位或(OR)

按位或OR由符号(|)表示,直接对数字的二进制形式进行运算。数字对齐位运算规则,有1时结果为1,否则为0

第一个数 第二个数 结果
1 1 1
1 0 1
0 1 1
0 0 0

按位异或(XOR)

按位异或XOR由符号(^)表示,直接对数字的二进制形式进行运算。数字对齐位运算规则,相同为0,不同为1

第一个数 第二个数 结果
1 1 0
1 0 1
0 1 1
0 0 0

左移运算

左移运算由两个小于号表示(<<),它把数字中的所有数位向左移动指定的数量
ct_js_operators_bitwise_leftshift.gif


无符号右移

有符号右移运算符由两个大于号表示(>>)。它把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)

  1. let a = 32;
  2. console.log(a >> 5);
  3. // 1
  4. console.log(a >> 2);
  5. // 8
  6. let b = -32;
  7. console.log(b >> 5);
  8. // -1
  9. console.log(b >> 2);
  10. // -8

有符号右移

无符号右移运算符由三个大于号(>>>)表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。负数的无符号右移运算得到的总是一个非常大的数字。

  1. let a = 32;
  2. console.log(a >> 5);
  3. // 1
  4. console.log(a >>> 5);
  5. // 1
  6. let b = -64;
  7. console.log(b.toString(2));
  8. // -1000000
  9. console.log(b >>> 4);
  10. // 268435452
  11. console.log((b >>> 4).toString(2));
  12. // 1111111111111111111111111100