位运算
将一个整数的二进制格式进行运算
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
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的次数)
全右位移:>>>
与右位移的区别,全右位移会导致符号位跟着位移。