与许多其他编程语言不同,JavaScript没有定义不同类型的数字,如整数,短整数,长整数,浮点数等。
JavaScript编号始终存储为双精度浮点数,符合国际IEEE 754标准。
所以我的问题是:如果我们想要执行按位操作,javascript如何将64位IEEE 754标准浮点数转换为普通的32位整数,以及它的效率如何?从直觉来看,转换数字会很昂贵,因此使用位移比使用2 n 更有效吗?
非常感谢!
答案 0 :(得分:3)
来自好零件:
按位运算符使用整数。 JavaScript没有 有整数。它只有双精度浮点数。 因此,按位运算符将其数字操作数转换为整数, 做他们的事,然后转换回来。在大多数语言中, 这些运算符非常接近硬件并且速度非常快。在 JavaScript,它们离硬件很远,速度很慢。
但最终,行为几乎总是特定于实现。某些JavaScript环境可能 - 无论是现在还是将来 - 能够推断出这条或那条代码将始终像int一样处理,或者默认情况下可以将vars存储为int。
唯一可以确定的方法是分析您的代码。像JSPerf这样的工具可能会有所帮助。它也可能会给你相互矛盾的指标 - 在一个浏览器中运行得更快的可能在另一个JavaScript引擎中表现不佳。性能提升也可能取决于您自己的生产代码在不知不觉中破坏的启发式方法。
但真正的问题是另一个问题:你打算做什么才能使乘法性能成为性能的关键因素?因为它可能不是你应该在阻止UI的客户端脚本中做的事情。