在学习数据结构与算法及刷题过程中,遇到使用位运算符的操作,不仅书写简单且性能较好,故在此对常见的位运算及其使用场景进行简单总结。
基本概念
位运算就是直接进行二进制运算。
位运算属于低级的运算操作,因此相较于一般运算符速度最快。
& 按位与
若两个相应的二进制位都是1,则该位的结果为1,否则为0
| 按位或
若两个相应的二进制位有一个是1,则该位的结果为1,否则为0
^ 按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~ 取反
用来对一个二进制数按位取反,将0变1,1变0
<< 左移
用来将一个数的各二进制位全部左移N位,右补0
>> 右移
用来将一个数的各二进制位全部右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
实际运用
(1)通过 ^ 实现 0 1 切换
toggle ^= 1
// 等同于
toggle = toggle ? 0 : 1
(2)转换布尔值
console.log(!!7) // true
console.log(!!0) // false
(3)取整 ⭐️
console.log(~~8.3) // 8
console.log(8.3 >> 0) // 8
console.log(8.3 << 0) // 8
console.log(8.3 | 0) // 8
console.log(8.3 >>> 0) // 8
(4)判断符号
只能对比整数
(a ^ b) >= 0 // true 相同 false 不同
(5)检查数字是否不相等
if(a ^ 12) ...
// 等同于
if(a !== 12) ...
(6)四舍五入
a + 0.5 | 0
// 等同于
Math.round(a)