按位非(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 |
左移运算
左移运算由两个小于号表示(<<),它把数字中的所有数位向左移动指定的数量
无符号右移
有符号右移运算符由两个大于号表示(>>)。它把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)
let a = 32;console.log(a >> 5);// 1console.log(a >> 2);// 8let b = -32;console.log(b >> 5);// -1console.log(b >> 2);// -8
有符号右移
无符号右移运算符由三个大于号(>>>)表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。负数的无符号右移运算得到的总是一个非常大的数字。
let a = 32;console.log(a >> 5);// 1console.log(a >>> 5);// 1let b = -64;console.log(b.toString(2));// -1000000console.log(b >>> 4);// 268435452console.log((b >>> 4).toString(2));// 1111111111111111111111111100
