Я видел людей, задающих вопросы об ошибке «Тип несоответствия: невозможно преобразовать int в байт». Но они в основном вызваны арифметическими операциями.«Несоответствие типа: невозможно преобразовать int в байт»
Вот мой случай:
(Это происходит, когда я хочу играть с битами в Eclipse, Kepler)
//java 7 binary literals
byte a = 0b01111111; //8-bit it compiles
byte b = 0b10000000; //8-bit error: Type mismatch: cannot convert int to byte.
byte c = (byte) 0b10000000; //8-bit it works fine if casted.
Дело в том, что если это 8 бит, а самая высокая цифра 1, то компилятор дает ошибку. Я хочу знать почему. Префикс 0b означает, что это двоичный литерал, поэтому почему компилятор принимает наивысшую цифру как подписанную цифру int или что-то в этом роде?
Спасибо за ответ.
[Edit3:]
byte a = -128; //a = 0xFF = 11111111 (8 bits), compiler says ok.
byte b = 0b11111111; //compiler error
[Edit2: побитовое & операция каким-то образом вызывает ошибку, а]
byte a = 0b00000000; //8 bits
a = (a&0xFF); //gives same error: Type mismatch: cannot convert int to byte
a = (byte)(a&0xFF); //it is fine to cast
[Edit1: скриншот обновлено]
@ jprofitt: Oh. Прицепи, ты прямо здесь. Это ... может изменить ответ ... Надо кое-что прочитать. –
На самом деле, я еще больше запутался. Согласно спецификации языка, нет байтовых литералов. Поэтому ни один из этих случаев не должен работать ... –
Спасибо за помощь! Я тоже считал цифры 2 минуты назад ... Я должен добавить длину комментариев, чтобы улучшить читаемость. –