Как правильно сделать побитовый сдвиг в этих 3 случаях? - PullRequest
0 голосов
/ 03 июля 2019

Я пересматриваю некоторые свои учебные ресурсы и натолкнулся на 2 примера, которые мне так сложны.

1) Результат побитового сдвига для значения типа int 0x80000000 >> 8 - это 0x800000 .Как сделать 8 сдвигов вправо, когда число цифр после 0x равно '8'?

2) Результат побитового сдвига для значения типа int 0xff00 << 8 </strong> равен 0xff0000 .Как сделать правильные побитовые 8 сдвигов влево, когда количество цифр после 0x равно только 6?

1 Ответ

1 голос
/ 03 июля 2019

Бинарный эквивалент 0x80000000 равен 10000000000000000000000000000000.Таким образом, сдвиг на 8 бит приводит к двоичному числу 100000000000000000000000, равному 0x800000.

. Бинарный эквивалент 0xff00 равен 0b1111111100000000.Сдвиг на 8 бит приводит к 0b111111110000000000000000.

Сдвиг влево и вправо фактически работают с двоичным эквивалентом чисел, а не с шестнадцатеричным эквивалентом.Как вы можете видеть, двоичный эквивалент имеет больше цифр, чем шестнадцатеричный эквивалент.

Однако предположим, что мы должны были сделать 0x80000000 >> 100, тогда 100 сдвигов будет больше, чем число двоичных цифр, поэтому результат будет 0x0.

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

...