Несколько побитовых сдвигов в одном выражении - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь написать метод, который принимает 32-битное целое число и целое число, представляющее байт в 32-битном целом, и возвращает переданный байт. Т.е. getByte (0x56781234, 0);// => 0x34.Мой мыслительный процесс заключается в том, что если я могу сместить права int в положение, где байт, который я хочу, является последним байтом целого числа, я могу И это с 0xFF, чтобы получить это значение.Так что-то вроде

public int getByte(int num, int byteVal) {
    return ((num >> 8) >> byteVal) & 0xFF;
}

Я знаю, что моя логика, однако, ошибочна.Я пытаюсь сместить несколько раз в одном утверждении.Предостережение: нет умножения.Совет?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы хотите сдвинуть вправо на 0, 8, 16 или 24 в зависимости от значения byteVal.В вашем примере вы уже сдвигаетесь вправо на 8, даже если byteVal равен 0, так что это не так.

Итак, как вы превращаете 0/1/2/3 в 0/8/16 /24 .... Если бы только была операция сдвига, которая могла бы сделать это!

return (num >> (byteVal << 3)) & 0xFF;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...