IQA*_*eas 10 javascript integer-overflow
JavaScript可以处理以下数学:
var result = (20000000 * 48271) % 0x7FFFFFFF;
Run Code Online (Sandbox Code Playgroud)
但是在某些编程语言中,第一次int*int乘法导致的值太大而无法保存在标准的32位整数中.有没有办法在JavaScript中"模拟"这个,并看看如果乘法导致整数溢出,结果计算会是什么?
在较新的浏览器中,Math.imul(a,b)将为您提供实际的 32 位整数乘法结果,并以您期望的方式产生溢出结果(它返回 64 位结果的下半部分)。
然而,据我所知,实际上没有办法获得溢出(高 32 位),但您在答案中显示的模数会消除该信息,所以我认为这不是您想要的。如果他们要进行溢出,无论如何他们都必须根据签名和未签名将其分开。
我知道这在 Chrome、Firefox 和 Opera 中有效,不确定其余的,但很确定 IE 没有它(典型)。您需要退回到像这样的垫片。
通过“滥用”JavaScript 中可用的按位运算符可以模拟 32 位整数(因为它们只能返回该范围内的整数)。
转换为有符号 32 位整数:
x = (a * b) | 0;
Run Code Online (Sandbox Code Playgroud)
转换为无符号 32 位整数:
x = (a * b) >>> 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |