为了账号安全,请及时绑定邮箱和手机立即绑定

JS 位运算小结

位运算应用场景:
  1. 偷懒简写(|): 取整、断言
  2. 标志位判断 (&): 权限控制
  3. 去掉高位/低位(&): 比较特定位、子网掩码
  4. 数值交换(^): 加密算法、生成随机数/哈希
  5. 构造属性集(|): 边界判断
  6. 缺省数值类型值(|):默认端口
  7. 位填充(>>): HEX2RGB、leftPad
  8. 试图提升算术运算性能
位运算示例:

1. 求 2 的 n 次方:

bitwise ES5 ES6+
1 << n Math.pow(2, n) 2 ** n

原理: 左移一位, 相当于将原数值与 2 相乘一次 , 即 m << n === m * Math.pow(2, n)

2. 求中间索引

bitwise ES5 ES6+
arr.length >> 1 Math.floor(arr.length / 2)) -

原理: 右移一位,相当于原数值除 2 后向下取整

3. 判断索引存在

bitwise ES5 ES6+
!!~'abc'.indexOf('d') 'abc'.indexOf('d') !== -1 'abc'.includes('d')

原理: 按位非 ~-1 === 0

4. 变量交换

bitwise ES5 ES6+
a ^= b; b ^= a; a ^= b; t = a; b = a; b = t; [b, a] = [a, b]

原理: 按位异或 1 ^ 1 === 0, 0 ^ 0 === 1

5. 分支开关

bitwise ES5 ES6+
flag ^= 1; flag = flag ? 0 : 1; -

原理: 按位异或 1 ^ 1 === 0, 0 ^ 0 === 1

6. 截取整数位

bitwise ES5 ES6+
~~-9.9; -9.9>>0; parseInt(-9.9) Math.trunc(-9.9)

原理: 位运算会默认将非数字类型转换成数字类型再进行运算
注意:

  1. 以上值(还有 -9.9|0 ) 都为 -9, 而 Math.floor(-9.9) 值为 -10
  2. 位运算取整方法不适用超过32位整数最大值 2147483647 的数: 2147483649.4 | 0 的值为 -2147483647

参考:

[1] 二进制位运算符

[2] 巧用 JS 位运算

[3] 由left-pad扯到JS中的位运算

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消