12.位运算

83 阅读2分钟

位运算

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

**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)

全右位移:>>>

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