Почему битшифтинг полезен? - PullRequest
1 голос
/ 27 февраля 2020

Я понимаю, как работает сдвиг битов и что компиляторы используют их для оптимизации времени выполнения, но я не понимаю математического значения сдвигов битов. Что это делает с числом в десятичной записи, например? Как я могу использовать битовые сдвиги в алгоритмах c программирования?

1 Ответ

0 голосов
/ 27 февраля 2020

Одним из полезных применений сдвига битов является Арифмети c Сдвиг , в котором вы используете сдвиг битов, чтобы выполнять определенные операции умножения или деления более эффективно, чем если бы это делалось традиционным способом.

Сдвиг влево на n битов двоичного числа со знаком или без знака приводит к умножению его на 2 ^ n. Сдвиг вправо на n битов двоичного числа со знаком, дополняющего два, приводит к его делению на 2 ^ n, но оно всегда округляется (в сторону отрицательной бесконечности).

В качестве примера возьмем следующее python код.

base = 5
traditional = 5 * 8  # or 5 * 2**3
shifted = 5 << 3
assert shifted == traditional

В этом примере вы можете видеть, что оба они дают один и тот же результат, просто получая его двумя разными способами. Это то, что ваш компилятор будет делать изнутри, чтобы оптимизировать математические операции c, когда он знает во время компиляции, что множитель является степенью 2

...