Нужна помощь в понимании использования побитовых операторов Я получил некоторый унаследованный код и не могу понять его: byte[] b = new byte[4] { 3, 2, 5, 7 }; int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3]; Может ли кто-нибудь сказать, что происходит здесь? Спасибо! Ответ 1 В основном он преобразует младшие 31 бит 4-байтового массива в целое число с помощью преобразования побитовое "и" | побитовое "или" << - это оператор с левым сдвигом Ответ 2 не сделали бит математику в минуту, поэтому.. для удовольствия: [дополнительная скобка для отображения порядка операций] ((b[0] & 0x7f) << 24) | (b[1] << 16) | (b[2] << 8) | b[3] (b[0] & 0x7f) << 24 = 11 0000 0000 0000 0000 0000 0000 b[1] << 16 = . . . . . . . . . . 10 0000 0000 0000 0000 b[2] << 8 = . . . . . . . . . . . . . . . 101 0000 0000 b[3] = . . . . . . . . . . . . . . . 0111 теперь ИЛИ эти вместе, и вы получите 0011 0000 0010 0000 0101 0000 0111 = 50,464,007
Ответ 1 В основном он преобразует младшие 31 бит 4-байтового массива в целое число с помощью преобразования побитовое "и" | побитовое "или" << - это оператор с левым сдвигом
Ответ 2 не сделали бит математику в минуту, поэтому.. для удовольствия: [дополнительная скобка для отображения порядка операций] ((b[0] & 0x7f) << 24) | (b[1] << 16) | (b[2] << 8) | b[3] (b[0] & 0x7f) << 24 = 11 0000 0000 0000 0000 0000 0000 b[1] << 16 = . . . . . . . . . . 10 0000 0000 0000 0000 b[2] << 8 = . . . . . . . . . . . . . . . 101 0000 0000 b[3] = . . . . . . . . . . . . . . . 0111 теперь ИЛИ эти вместе, и вы получите 0011 0000 0010 0000 0101 0000 0111 = 50,464,007