Объясните, пожалуйста, как происходит сужение double m = (byte) 110_987_654_6299.123_34;
Как число 110_987_654_6299.123_34 становится -1.0?
Светлана
26 уровень
Перевод вещественного в byte
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас ПасинковSoftware Developer в ZipyMaster
20 апреля 2018, 19:16
попробуйте приводить не к байту, а к другому типу данных :)
0
hidden #1278682
20 апреля 2018, 16:18
Почитайте про переполнение типов
0
Светлана
20 апреля 2018, 17:12
прочитала, проблема именно перевода double в byte. Отбрасываю дробную часть, остается 110_987_654_6299. И дальше считаю сколько раз переполняется тип byte. На выходе у меня получается, что m=123. Где я не права?
И почему в числе 110_987_654_6299 в последнем разряде 4 числа, почему не такая запись - 1_109_876_546_299?
0
hidden #1278682
20 апреля 2018, 19:24решение
Черточки ставить можно в любом месте. Double сначала приводится к int. Если double превышает максимальное значение int, то берется Iteger.MAX_VALUE. Далее int приводится к byte - просто берется последние 8 бит. Потом byte расширяется до double - остается тоже число.
Источник: stackoverflow подсказал. У Шилда еще описано это, но правда не очень ясно
+11
hidden #1278682
20 апреля 2018, 19:49
https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3
+1
Светлана
22 апреля 2018, 18:52
спасибо большое, разобралась
0
Дмитрий
30 июня 2019, 10:05
2147483647 это Integer.MAX_VALUE
в двоичном виде 01111111111111111111111111111111
последние 8 бит 11111111 это 255 (или вернее берется 01111111)
как здесь получается -1.0?
0