gpt4 book ai didi

javascript - 有没有办法查看node js内部如何存储数字?

转载 作者:行者123 更新时间:2023-12-01 03:50:11 25 4
gpt4 key购买 nike

我正在努力提高对 Node.js 中浮点的理解。我的理解是,JavaScript 中的每个数字都存储为 64 位浮点(这有点疯狂,但很酷),我想尝试一下这些。

有没有一种简单的方法可以打印出任意数字的内部存储方式?像 (5).toFloatRepresentation() 这样的东西会返回 101... ?

我在网上查了一下,找不到任何东西——如果我错过了一些明显的东西,我深表歉意!

我知道我可以编写一个函数来完成此操作,但我有兴趣从另一方面看事情!

谢谢!

最佳答案

My understanding is that every number in javascript is stored as a 64-bit floating point

有点,有点,不完全是。数字的内部表示相当复杂。最初,V8(Node js 所基于的 JavaScript 引擎)在内部使用标记指针。

诀窍是 64 位机器上的指针以至少三个有效位为 0 的方式对齐。因此您可以在指针本身中存储附加信息(例如,它是指针还是整数)。

因此,V8 将整数和指针存储在堆栈上,位于相同的 64 位空间中。请注意,由于最后一位用作标志,因此 V8 中的整数最多为 61 位(据我所知只有 32 位?)。另一方面, double 作为单独的对象存储在堆上。

另一方面,WebKit 实现现在使用所谓的 nan-boxing,它将指针存储在 double 值中。这是根据 NaN 具有 2^53 不同表示形式的观察得出的。您可能会问如何在 53 位中存储 64 位指针(或者实际上是 61 位指针)?好吧,你可以,因为目前(即由于 RAM 尺寸较小)仅使用 48 位。

因此,在 WebKit 中,整数确实存储为 double 。但 WebKit 还在堆栈中存储了小整数(作为适当的整数类型),以便在循环和索引中使用它们。这是因为整数运算仍然至少与浮点运算一样快,并且在许多情况下更快。

这是一篇有趣的(尽管相当过时)文章,您可能想阅读:

https://wingolog.org/archives/2011/05/18/value-representation-in-javascript-implementations

Is there an easy way to print out how an arbitrary number is stored internally?

没有。其实根本就没有办法。正如我所提到的,这完全取决于 JavaScript 引擎,并且规范中没有 API 来检索该信息。您可以尝试阅读the source code不过。

I know I could write a function that did this

你不能。无论如何,不​​是在 JavaScript 中。除非我真的误解了这个问题。内部表示和您在 JavaScript 中看到的内容是两个不同的世界。

关于javascript - 有没有办法查看node js内部如何存储数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43291515/

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