为什么要使用位操作,因为位操作是直接操作二进制数,是所有语言中执行效率最高的运算。
以下代码以 JS 为例,部分代码在所有支持位操作的语言通用。
快速取整
1parseInt(2.2) === ~~2.2 // true
2parseInt('1.3') === ~~'1.3' // true
31<<30 === ~~1<<30 // true
4
5// notice
6
7parseInt('4294967296') === ~~4294967296 //false, 越界
8parseInt('4294967296') === ~~'4294967296' //false, 越界
Copy
快速累加
1-~undefined === 1 // true
2-~0 === 1 // true
3-~1 === 2 // true
4-~-1 === 0 // true, -~-1 为 -0
5
6-~2<<30 === 2<<29+1 //false
Copy
是否奇数
11 & 1 === 1 // 1 为奇数
22 & 1 === 0 // 0 为偶数
33 & 1 === 1 // etc.
Copy
权限
1// 比如我有 2 3 4 号权限
2permission = 1 << 2 | 1 << 3 | 1 << 4
3// 现在判断我有没有 3 号权限
4hasPerssion3 = !!(permission & 1 << 3) // res is 8, true
5hasPerssion5 = !!(permission & 1 << 5) // res is 0, false
6hasPerssion0 = !!(permission & 1 << 0) // res is 0, false
Copy
注意最大边界为 1 << 30, 更大需要用 BigInt
持续更新,有更好的用法欢迎评论区指出

亲亲留个评论再走呗

正在加载评论区...