Вместо деления числа на 2, вы можете сдвинуть его вправо на 1. Это универсальное правило оптимизации для деления на 2,4,8,16,32 и так далее. Это деление можно заменить на сдвиг вправо 1,2,3,4,5 и так далее. Они математически эквивалентны.
Сдвиг лучше, потому что инструкция разделения ассемблера ужасно неэффективна на большинстве архитектур ЦП. Команда логического сдвига вправо выполняется намного быстрее.
Однако , компилятор должен выполнить эту оптимизацию за вас, или у него довольно плохой оптимизатор. По стилю может быть лучше написать операторы деления и по модулю в коде C, но убедитесь, что компилятор фактически оптимизирует их для операций сдвига.