gpt4 book ai didi

javascript - 移位与乘法

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:39 25 4
gpt4 key购买 nike

我正在尝试将字节数组转换为数字,对于大数字, 我看到位移给出了 -ve 结果。 你们中的一个人可以请问为什么我们会看到这个问题吗?您是否发现使用“乘法”而不是“移位”有任何缺点?

例如,

<script language="JavaScript">
var myVar = 1000000;
document.write("Bit shift Result: " + (myVar << 8));
document.write("<br>");
document.write("Multiplication Result: " + parseInt(myVar *256));
</script>

Output:

Bit shift Result : 256000000

Multiplication Result: 256000000

在 myVar 中再添加一个零,您就会看到我在说的问题

<script language="JavaScript">
var myVar = 10000000;
document.write("Bit shift Result: " + (myVar << 8));
document.write("<br>");
document.write("Multiplication Result: " + parseInt(myVar *256));
</script>

Output:
Bit shift Result: -1734967296

Multiplication Result: 2560000000

最佳答案

回答你的两个问题:

你们中的一个能问问我们为什么会看到这个问题吗?

JavaScript 数字是标准的 IEEE double 字。

JavaScript 可以容纳的最大整数值是:9007199254740992

但是,位移运算符适用于 32 位整数。

我引用 the language specification :

5 . Let lnum be ToInt32(lval).

...

Return the result of performing a sign-extending right shift of lnum by shiftCount bits. The most significant bit is propagated. The result is a signed 32-bit integer.

您认为使用“乘法”而不是“位移位”有什么缺点吗?

它仍然有点慢,但你真的应该避免在大多数时候直接在 JavaScript 中处理非常大的数字。

有些库可以处理非常大的数字,并且正在讨论一些功能,以便为语言(ES7 值类型)添加对大数字的更好支持。

关于javascript - 移位与乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com