Junior
45
questionbank

Как можно умножить или разделить целое число на 2, используя битовые операции?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Для умножения на 2 используется битовый сдвиг влево (<<).
Для деления на 2 используется битовый сдвиг вправо (>>).

cpp

При делении отрицательного числа на 2 с использованием битового сдвига вправо (>>) результат будет зависеть от типа сдвига:

  • Логический (unsigned): В освобождающиеся биты слева будут записываться нули.
  • Арифметический (signed): В освобождающиеся биты слева будет записываться значение знакового бита (для сохранения знака).

В C/C++ для знаковых типов используется арифметический сдвиг. Это может привести к неожиданным результатам для нечетных отрицательных чисел:

cpp

Для корректного деления отрицательных чисел на 2 с округлением в сторону нуля при использовании битового сдвига, можно использовать следующий прием:

cpp