JavaScript可以正常处理以下数学:
var result = (20000000 * 48271) % 0x7FFFFFFF;
但是在某些编程语言中,第一次int*int
乘法导致的值太大而无法保存在标准的32位整数中。有没有办法模拟"这在JavaScript中,看看如果乘法导致整数溢出,结果计算会是什么?
答案 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;