Как Java хранит +-бесконечный в памяти? - PullRequest
2 голосов
/ 31 июля 2011

Если для хранения от -2 ^ 31 до 2 ^ 31 требуется все 32 бита, как он может хранить + и - Infinite? Использует ли он больше памяти? Хорошо и безопасно хранить эти значения?

ОБНОВЛЕНИЕ: благодаря ответам я знаю, что только типы данных с плавающей запятой могут хранить значения Inf, а целые числа не могут.

Ответы [ 2 ]

8 голосов
/ 31 июля 2011

Java, как и большинство других языков программирования, следует спецификации IEEE 754 для чисел с плавающей запятой .Диапазон возможных значений немного уменьшен, чтобы учесть бесконечности, а также NaN (не число) .Это безопасно для хранения;они даже доступны как константы, например Double.POSITIVE_INFINITY.

Если для хранения требуется от 32 до 31 ^ 2 * 31

* всего 32 байта1015 *

Я думаю, вы имеете в виду 32 бит , чтобы хранить все возможные целочисленные значения в этом диапазоне.Тип Integer в Java работает так, как вы его описываете, и не может хранить бесконечности или другие специальные значения.

6 голосов
/ 31 июля 2011

Если для хранения от -2 ^ 31 до 2 ^ 31 ...

требуется все 32
байта бит

Там вы говорите о Integer с .

... как можно хранить + и - Бесконечно?

Там вы говорите о Float и Double, которые представляют собой разные типы данных. Float - это 32-разрядное число IEEE 754, а Double - это 64-разрядное число IEEE 754. IEEE 754 Числа с плавающей запятой имеют специальные значения, отложенные для положительной и отрицательной бесконечности.

В классе Java Integer нет специального значения "бесконечность", вы можете хранить полный диапазон значений.

...