位运算
将一个整数的二进制格式进行运算
**js中,如果对一个数据进行位运算,它首先会将其转换为一个整数,并且按照32位的整数二进制排列 ** 举例
2.7 -> 2 -> 0000 0000 0000 0000 0000 0000 0000 0010
NaN -> 0
Infinity -> 0
-Infinity -> 0
与运算
符号:&
写法:整数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按位比较,不同取1,相同取0
应用场景
位的叠加(开关)
位移运算
左位移: <<
写法: 数字1 << 数字2 结果: 数字1 * 2 ^ 数字2
将数字1的二进制(除符号之外,左移动数字2的次数)
右位移:>>
写法: 数字1 >> 数字2 结果: 整数(数字1 / 2 ^ 数字2)
全右位移:>>>
与右位移的区别,在于全右位移会导致符号位跟着位移。