Не понимаю, как эти побитовые операторы работают с байтами и целыми числами - PullRequest
0 голосов
/ 21 июня 2019

Я работаю с некоторым кодом, который принимает в качестве входных данных двоичный файл.Однако у меня возникают проблемы с пониманием цикла for в коде, так как я не понимаю, что делают побитовые операторы с IFD_Address, например |=, << и & 0xff.Я думаю, что IFD_Address относится к указателю в двоичном файле, но я не уверен.Чего пытается достичь этот кусок кода?

byte[] IFD_Address_tmp = Arrays.copyOfRange(bytes, 4, 8); 
int IFD_Address = 0;
int i = 0;
int shiftBy = 0;
for (shiftBy = 0; shiftBy < 32; shiftBy += 8) {
    IFD_Address |= ((long) (IFD_Address_tmp[i] & 0xff)) << shiftBy;
    i++;
}

1 Ответ

0 голосов
/ 21 июня 2019

Это поведение лучше всего понимать с точки зрения перемещения бит, а не чисел. Байты содержат восемь битов, целые числа, 32 бита. Цикл в основном берет каждый байт в массиве и помещает соответствующие биты в целое число IFD_Address в 8-битные порции, справа (наименее значимый), слева (наиболее значимый), например:

enter image description here

О побитовых операциях:

Подробнее см. в этом руководстве .

...