为什么数学.我能返回这个值吗?

  • 本文关键字:返回 javascript
  • 更新时间 :
  • 英文 :

console.log(-559038841 * 2654435761); //returns -1483932691338393000
console.log(Math.imul(-559038841 , 2654435761)); // returns 1445956183.

我期望这两个具有相同的值,但它们没有。为什么会这样?

我想这与数学的32位特性有关。我想,但不确定。

根据规范,Math.imul不仅在执行乘法运算前将其操作数转换为无符号32位整数,而且还通过对结果[1]执行modulo 2^32将结果限制为32位整数。因此,最终结果不可能大于2^32 - 1,即4294967295

之后,它还通过将最高有效位作为符号位将其转换为有符号整数,因此实际的最终结果在-(2^31)2^31 - 1之间,或者在-21474836482147483647之间

[1]我想在实践中,引擎只是简单地去掉多余的位,保留不太重要的32位。但效果和对2^32取模是一样的。

相关内容

  • 没有找到相关文章

最新更新