Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

Как происходит расширение примитивных типов

#java #типы_данных


Предположим, у нас есть такой код:   

long a = 0x1_0000_0000L + 0xCAFE_BABE;
System.out.println(a == 0x1_CAFE_BABEL);


Почему будет выведен false? По идее, число 0xCAFE_BABE должно быть автоматически
расширено до типа long, и уже после этого должно произойти сложение.
    


Ответы

Ответ 1



а оно и происходит. Просто 0xCAFE_BABE - отрицательное (!) поэтому оно и приводится к отрицательному long - у. Т.е. (long)(0xCAFE_BABE) (именно в такой записи) - это FFFF_FFFF_CAFE_BABE что немного не то, на что вы рассчитывали. Поэтому числа больше 7FFF_FFFF в подобных ситуациях нужно писать только с суффиксом L.

Комментариев нет:

Отправить комментарий