#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.
Комментариев нет:
Отправить комментарий