JavaScript:高效的整数运算

Mic*_*son 6 javascript math integer

我目前正在为编译为JavaScript的小语言编写编译器.在这种语言中,我非常喜欢使用整数,但JavaScript只支持Number,这是一个双精度浮点值.那么,在JavaScript中实现整数的最有效方法是什么?与使用Number相比,这有多高效?

特别是,溢出行为应该与其他语言一致:例如,向INT_MAX添加一个应该给出INT_MIN.整数应该是32位或64位.

cas*_*nca 9

那么,在JavaScript中实现整数的最有效方法是什么?

原始数字类型与它获得的效率一样高.许多现代JS引擎都支持JIT编译,因此它应该与本机浮点算法一样高效.

特别是,溢出行为应该与其他语言一致:例如,向INT_MAX添加一个应该给出INT_MIN.整数应该是32位或64位.

您可以通过注意JavaScript将"数字"转换为32位整数进行按位运算来实现标准32位整数运算的语义.>>>(无符号右移)将其操作数转换为无符号32位整数,而其余(所有其他移位和按位AND/OR)将其操作数转换为带符号的32位整数.例如:

  • 0xFFFFFFFF | 0收益率-1(签名)
  • (0xFFFFFFFF + 1) | 0收益率0(溢出)
  • -1 >>> 0收益率0xFFFFFFFF(无符号转换)


ent*_*opo 3

我在 Javascript 中找到了 BigIntegers 的实现: http://www-cs-students.stanford.edu/~tjw/jsbn/

也许这会有帮助?

编辑:另外,Google Closure 库实现了 64 位整数: http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/math/long.js

不过,这些本质上只是生成方便的对象,对于提高基本数据类型的效率没有任何帮助。