Для умножения на 2 используется битовый сдвиг влево (<<).
Для деления на 2 используется битовый сдвиг вправо (>>).
cpp
При делении отрицательного числа на 2 с использованием битового сдвига вправо (>>) результат будет зависеть от типа сдвига:
В C/C++ для знаковых типов используется арифметический сдвиг. Это может привести к неожиданным результатам для нечетных отрицательных чисел:
cpp
Для корректного деления отрицательных чисел на 2 с округлением в сторону нуля при использовании битового сдвига, можно использовать следующий прием:
cpp