【问题标题】:What does it mean when saying that numbers are stored in binary format [duplicate]说数字以二进制格式存储是什么意思[重复]
【发布时间】:2021-04-07 05:55:14
【问题描述】:

我是 JS 新手,我正在通过视频讲座学习。 在其中一个视频中,有人说:“

数字始终以二进制格式存储"

这就是很难表示一些在我们习惯的base 10系统中很容易表示的分数的原因。 我知道一些开发语言(c、java等),例如数字在JS中的存储方式与在java中的存储方式有区别吗?

【问题讨论】:

  • 不,没有区别,基本上所有东西都是二进制存储的。
  • JS 中的数字是 IEEE754-2019 float64。而已。不多也不少。还有BigInt,但这不是默认的“数字”
  • 我会很高兴了解人们反对它的原因......
  • 我没有投反对票,但这对我来说也是临界点。没有迹象表明,你对一个可能已经讨论过数百万次的主题进行了任何研究。如果您有更好的问答比例,我也许可以假设您确实付出了努力,但按原样,我不能。您还标记了java。当您在某处提到该语言时,它与问题几乎没有关系。如果我来自java 标签,那将是我的默认反对票。通常,这种错误标记再次表明“没有付出任何努力”。
  • @ASDFGerte,我在视频中提到了 Java,因为他们说的是其他语言。 Java 对我来说是一个参考。如果标记 java 是错误的,我会删除它

标签: javascript binary numbers


【解决方案1】:

JS 中数字的存储方式与其他编程语言没有什么不同。所有数字都存储在以 2 为底(又称二进制)的事实是某些分数难以在 JS(和其他语言)中存储的原因。例如,基数为 10 的数字 0.1 是 0.000110011... 二进制,其中 0011 无限循环。由于您的计算机只有有限位数 if 位,因此您无法准确存储 0.1,您只能近似它,因此不精确。

如果您需要精确的数字,大多数编程语言都有数据类型来准确存储数字。在 javascript 中,您可以使用 BigInteger 类型更准确地存储数字。 JS 中使用的默认数字类型 float,但是缺乏精度并遇到上述问题。

【讨论】:

  • 为什么以 10 为底的 0.1 不是 0.1?
  • @Eitanos30 我改写了句子...
  • 有些数字表示可以准确地表示十进制数,例如JS 中的大整数。 “其他语言”也有不同的表示,而不仅仅是浮点。
  • 谢谢@JonasWilms,我补充了几句话:)
  • @Eitanos30 这是因为 10 base 10 与 10 base 2 不同的原因。0.1 base 10 是 1 * 10^-1,0.1 在 base 2 ( binary) 是 1 * 2^-1 ,这就是它们的值不同的原因。毕竟,如果基数 2 中没有 2,那么基数 10 中的 0.2 会是基数 2 吗?
猜你喜欢
  • 2010-11-03
  • 2012-01-05
  • 2016-04-24
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多