Приведение двойного к другому числовому типу

меня что-то озадачивает, и я не нашел много информации о характеристиках виртуальной машины. Это немного неясно, и было бы неплохо, если бы кто-то мог мне объяснить.

Эти несколько строк кода .....

<code>double myTest = Double.MAX_VALUE;

System.out.println("1. float: " + (float)myTest);
System.out.println("2. int: " + (int)myTest);
System.out.println("3. short: " + (short)myTest);
System.out.println("4. byte: " + (byte)myTest);
</code>

..... произвести этот вывод:

плавать: бесконечностьint: 2147483647короткий: -1байт: -1

byte, short а такжеint 8, 16, 32 бит с дополнением до двух.float а такжеdouble это 32 и 64 бит IEEE 754 (глянь сюда).

Насколько я понимаю, максимальное значениеdouble подразумевает, что все биты богомола (52 бита) переключены на 1. Поэтому неудивительно, что приведение к короткому или байтовому результату возвращает -1, т. е. все биты переключены на 1. Кажется, что приведение сохраняет «хвост»double так что вписывается в 8 битbyte или 16 битshort.

Что меня удивляет, так это актёрский составint и, в меньшей степени,float, Как можно получить «2. int: 2147483647», равное 0x7FFFFFFF, максимальное значение при коротком, а байты 3. и 4. равны -1?

Актерский составfloat тоже странно. Если 32 бита в «хвосте»myTest были сохранены, то не должно ли оно генерироватьNaN ?

Ответы на вопрос(1)

Ваш ответ на вопрос