Можно,
x << 1 == x * 2
x << 2 == x * 4
etc...
и разговорчиво
x >> 1 == x / 2
x >> 2 == x / 4
etc...
Хотя я бы сказал, что опытный c-программист должен иметь возможность взглянуть на операцию сдвига битов и знать, что оба метода аналогичны. Если бы у меня был выбор, я бы всегда использовал сдвиг битов, поскольку ясно, каковы ваши намерения. Если бы вы использовали опцию умножения / или деления, вам явно нужно было бы прокомментировать, почему вы вдруг умножаете значения на кажущиеся случайными числа. Принимая во внимание, что сдвиг битов четко указывает на то, что вы пытаетесь сдвинуть биты.
Как и для любых комментариев по оптимизации, если абсолютно не требуется, например. критичное по времени программирование, я бы не стал чрезмерно беспокоиться об оптимизации вашего кода. Читаемость и удобство сопровождения кода должны быть в центре вашего внимания, а не в оптимизации! Если в конце разработки вам понадобится больше производительности, вы всегда можете вернуться и выполнить оптимизацию (убедившись, что вы тщательно документируете все, что делаете!). Но во время разработки я бы пошел на то, что легче всего читать и поддерживать, например. используя '<<' / '>>'.