Я взаимодействую с унаследованной системой, которая принимает много ввода на уровне бит. Это требует, чтобы я передавал в октетах (действительно байты) с определенным набором бит.бит битрального байта с самым высоким битом
Чтобы это читаемым, я объявляю некоторые флаги, как это:
private static final byte FLAG_A = 0b00010000;
private static final byte FLAG_B = 0b00100000;
private static final byte FLAG_C = 0b00011000;
Это прекрасно работает.
Странно то, что когда я устанавливаю самый старший бит (как показано ниже), компилятор начинает жаловаться, что находит int. Я мог бросить его, но мне это кажется странным. Это еще 8 бит, так что я бы ожидать, что она помещается в байтах (даже если два-дополнения обозначение заставляет его быть истолкован как отрицательные, что не имеет никакого значения для меня)
private static final byte FLAG_D = 0b10000000;
Любой идею, что происходит на?
'... = (байт) 0b10000000;' это самое простое решение; поэтому int 128 становится байтом -128. (Байт Java подписан -128..127, числовые переполнения отбрасываются) –