Объясните откуда вообще берётся число -117 ???
public class Solution {
public static void main(String[] args) {
double d = (byte) 139;
System.out.println(d);
-117.0
А также попутно второй вопрос откуда 250.0 ???
Задача №6 на преобразование целых типов
*/
public class Solution {
public static void main(String[] args) {
double d = (short) 2.50256e2d;
System.out.println(d);
}
}
hidden #1622124
26 уровень
?
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #1622124
25 апреля 2018, 20:03
Не понял.
0
Ярослав Java Developer Master
25 апреля 2018, 20:08
А что непонятного? byte поддерживает значения от -128 до 127.
Когда значение уходит за 127, оно не уходит дальше на 128, 129, 130 и так далее, а возвращается в начало - на -128.
128 уже обращается в -128 (вернулось в начало), потом от 139 у тебя осталось еще 11.
-128 + 11 = -117.
0
Ярослав Java Developer Master
25 апреля 2018, 20:11полезный
О втором вопросе: тут вообще элементарно. 2,50...e2d - это значит 2,5 * 10 ^ 2, а d - значит, что значение типа double. Потому у нас получается при 2,5 * 10 ^ 2 значение 250 и там после точки еще числа. Когда округляем до шорта (или любого другого целочисленного типа), вся дробная часть сбрасывается. Остается 250. В d заносится значение 250. Вот и весь секрет.
+2
hidden #1622124
25 апреля 2018, 20:13
Не пойму одну штуку. Что значение от -128 до 127 - это понятно -огонь.
Не понятно почему мы вообще отнимаем нижний диапозон -128 ? а не верхний 127 .
И ещё больше не понятно Почему отнимаем дважды . Ведь остаток 11 уже входит в диапозон
0
Ярослав Java Developer Master
25 апреля 2018, 20:21
Что значит "отнимаем нижний диапазон, а не верхний"? 139 на 12 больше, чем 127.
127 + 1 = -128.
Осталось 11.
-128 + 11 = -117.
Вот еще пример: 257 переводим в byte. Отнимаем 128 и получаем byte = -128, остается еще 129, -128 + 129 = 1.
В вопросе рядом Egorro сбросил скриншот как это происходит на битовом уровне: https://javarush.com/pictures/1386551/4d79bf3d-2845-4e43-8651-3ba26c3262c3.jpg
Вообще из этого всего можно вывести формулу:
(byte) число = число%128 - 128;
Проверка:
257 % 128 = 129 - 128 = 1.
128 % 128 = 0 - 128 = -128.
139 % 128 = 11 - 128 = -117.
+1
Ярослав Java Developer Master
25 апреля 2018, 19:59
byte поддерживает числа от -128 до 127, у тебя же 139. Оно с плюсов возвращается обратно на -117. 128 - это -128, 139 - 128 = 11, -128 + 11 = -117.
0