Побитовые операции в Java с использованием byte и int

Я пытаюсь выполнить некоторые побитовые операции в java

У меня есть 2 массива:

byte[] bitArray;
final  byte [] bitMask = {1,2,4,8,16,32,64,-128};

затем я пытаюсь | один байт в bitArray с одним байтом в mask.

bitArray[i] = bitArray[i] | bitMask[j]

Проблема в том, что я получаю ошибку компилятора.

"ошибка возможная потеря точности" требуемый байт найден int

Вопрос в том, как я могу это исправить?


person ortusolis    schedule 05.03.2015    source источник
comment
Каков твой вопрос?   -  person user253751    schedule 06.03.2015
comment
Как решить проблему   -  person ortusolis    schedule 06.03.2015
comment
Также см. stackoverflow.com/questions/2003003/   -  person Louis Wasserman    schedule 06.03.2015


Ответы (1)


Здесь происходит следующее: < em>двоичное числовое продвижение. Java будет продвигать типы операндов для большинства бинарных операторов, включая побитовый оператор ИЛИ |, по крайней мере до int перед выполнением операции. Результатом bitArray[i] | bitMask[j] является int, а не byte.

Вы должны явно вернуть его к byte после выполнения операции.

bitArray[i] = (byte) (bitArray[i] | bitMask[j]);

Кроме того, с помощью составного оператора |= означает, что вам не нужно возвращаться к byte.

bitArray[i] |= bitMask[j];
person rgettman    schedule 05.03.2015