Я видел, как люди задавали вопросы об ошибке «Несоответствие типов: невозможно преобразовать int в byte». Но они в основном вызваны арифметическими операциями.
Вот мой случай:
(это происходит, когда я хочу поиграть с битами в 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 означает, что это двоичный литерал, так почему компилятор принимает самую старшую цифру как цифру со знаком или что-то в этом роде?
Спасибо за ответ.
[Редактировать3:]
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: скриншот обновлен] 
