两个按位非操作与Math.floor操作(译)

本文深入探讨了位操作符中的按位非操作原理及其实用技巧,通过实例展示了其在将浮点数转换为整型时与 Math.floor() 的高效比较,并提供了不同浏览器下执行效率的测试结果。同时,文章还阐述了使用按位非操作符作为替代方案的场景,以及不适用的场景,旨在帮助开发者更灵活地运用这一技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位操作符在我们编码过程中是容易被遗忘的,可能更多的源于我们并不知道这些操作究竟代表什么,或者有什么样的作用,位操作符主要涉及有按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>),本文主要讲的是按位非(~)。

关于这个位操作的原理,大家可以参考这里

按位非(~)操作对数值进行操作后,结果为-(N + 1),如:

 

~2 == -3;//true
~1 == -2;//true
~0 == -1;//true
~-1 == 0;//true

 

 但这个位操作符的最大用途是使用两个按位非操作符来取代Math.floor操作,能够将任何浮点型数值转换成整形。如:

 

~~2 == Math.floor(2); //true 2
~~3.5 == Math.floor(3.5);//true 3
~~2.8 == Math.floor(2.8);//true 2

有人做了一个测试,关于两个按位非操作与Math.floor操作的执行效率问题,如下:

将100000个浮点型数值转换成整型 http://jsperf.com/jsfvsbitnot

#BrowserMath.floor()Bitwise double NOT ~~
#1Firefox 7.0.142ms29ms
#2Firefox 7.0.144ms28ms
#3Chrome 1563ms64ms
#4Chrome 1563ms68ms
#5IE8265ms192ms
#6IE8324ms190ms

Performance difference between Math.floor() and JavaScript bitwise double NOT

使用两个按位非操作的场景:

 

  • 想要将一个浮点型转换成整型
  • 与Math.floor相同的操作,但执行更快些
  • 尽可能地减少代码量

不使用的场景:

 

  • 当游览器为Chrome的时候
  • 想让你的代码可读性好些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值