“模拟”JavaScript中的32位整数溢出

时间:2014-05-10 06:20:50

标签: javascript integer-overflow

JavaScript可以正常处理以下数学:

var result = (20000000 * 48271) % 0x7FFFFFFF;

但是在某些编程语言中,第一次int*int乘法导致的值太大而无法保存在标准的32位整数中。有没有办法模拟"这在JavaScript中,看看如果乘法导致整数溢出,结果计算会是什么?

2 个答案:

答案 0 :(得分:4)

在较新的浏览器中,Math.imul(a,b)将为您提供实际的32位整数乘法结果,溢出会产生您期望的方式(它将64位结果的下半部分作为返回值)。

然而,据我所知,实际上没有办法实现溢出(高32位),但你在答案中显示的模数除去了那些信息,所以我想到了这一点。不是你想要的。如果他们要溢出,他们必须根据签名和未签名的方式将其分开。

我知道这适用于Chrome,Firefox和Opera,不确定其余部分,但非常确定IE没有(典型的)。你需要回到this one这样的垫片。

答案 1 :(得分:1)

可以通过“滥用”JavaScript中可用的按位运算符来模拟32位整数(因为它们只能返回该范围内的整数)。

要转换为带符号的32位整数

x = (a * b) | 0;

转换为无符号32位整数

x = (a * b) >>> 0;