【问题标题】:How does Java store +-Infinite in memory?Java如何在内存中存储+-Infinite?
【发布时间】:2011-10-16 19:44:08
【问题描述】:

如果从 -2^31 到 2^31 需要所有 32 位来存储,它如何存储 + 和 - 无限?它会使用更多内存吗?存储这些值是否安全且安全?

更新:感谢答案,我知道只有浮点数据类型可以存储 Inf 值,整数不能。

【问题讨论】:

标签: java math memory infinite


【解决方案1】:

Java 以及大多数其他编程语言都遵循IEEE 754浮点数规范。可能值的范围略微缩小以允许the infinities as well as NaN (Not a Number)。这些可以安全存放;它们甚至可以作为常量使用,例如 Double.POSITIVE_INFINITY

如果从 -2^31 到 2^31 需要全部 32 个字节来存储

我认为您的意思是 32 个,用于存储此范围内所有可能的整数值。 Java 的 Integer 类型如您所描述的那样工作,并且无法存储无穷大或其他特殊值。

【讨论】:

  • 您为 Double.POSITIVE_INFINITY 提供的链接现在无效。
【解决方案2】:

如果需要全部 32 个 byte 位来存储从 -2^31 到 2^31...

你在说Integers

...它如何存储 + 和 - Infinite?

您说的是FloatDouble,它们是不同的数据类型。 Float 是 32 位 IEEE 754 编号,Double 是 64 位 IEEE 754 编号。 IEEE 754 浮点数具有为正无穷和负无穷预留的特殊值。

Java 的Integer 类中没有特殊的“无穷大”值,可以存储全范围的值。

【讨论】:

  • 谢谢。我更新了我的问题。我虽然 Integer 也可以存储 Infinity。
  • @W.N.:不,Integer 中没有无穷大。如果你想要它,你必须在你的应用程序中留出一个值来视为无穷大,这可能很棘手,或者定义你自己的类来聚合一个 Integer 以及一个表明它持有“无穷大”的标志。
猜你喜欢
  • 2013-08-01
  • 2011-10-03
  • 2020-04-01
  • 2023-04-06
  • 1970-01-01
  • 2021-12-04
  • 2021-11-21
  • 2013-09-02
  • 2018-12-29
相关资源
最近更新 更多