位运算

将一个整数的二进制格式进行运算

JS中,如果对一个数据进行位运算,它首先会将其转换为一个整数,并且按照32位的整数二进制排列

举例

2.3 --> 2 --> 0000 0000 0000 0000 0000 0000 0000 0010 

NaN -> 0

Infinity -> 0

-Infinity -> 0
1
2
3
4
5
6
7

与运算

符号:&

写法:整数1 & 整数2

将两个整数每一位进行比较,如果都为1,结果为1,否则为0。

或运算

符号:|

写法:整数1 | 整数2

将两个整数每一位进行比较,如果都为0,结果为0,否则为1。

否(非)运算

符号:~

写法:~整数

将该整数按位取反

负数的存储方式

-1

真码:1000 0000 0000 0000 0000 0000 0000 0001 反码:1111 1111 1111 1111 1111 1111 1111 1110 真码取反 补码:1111 1111 1111 1111 1111 1111 1111 1111 反码加1

取反的快速运算:在要取反的数字前加符号,再减1。 -取反数字 -1

JS中最快速的取整方式:~~整数

异或运算

符号:^

写法:数字1 ^ 数字2

将数字1 和 数字2 按位比较,相同取0,不同取1.

应用场景

位的叠加(开关)

位移运算

左位移:<<

写法:数字1 << 数字2 结果:数字1 * 2^数字2 ,数字1 乘以 2的数字2 次方

将数字1的二进制(除符号外,左移动数字2的次数)

右位移:>>

写法:数字1 >> 数字2 结果:数字1 / 2^数字2 ,数字1 除以 2的数字2 次方,后取整

将数字1的二进制(除符号外,右移动数字2的次数)

全右位移:>>>

与右位移的区别,全右位移会导致符号位跟着位移。