В современных компиляторах оптимизация кода с помощью операторов битового сдвига происходит следующим образом: компилятор заменяет операции целочисленного умножения на степени двойки (2^n) битовым сдвигом. 2 Например, val * 16 выполняется в два раза быстрее, чем val * 12, потому что будет заменена на val << 4. 2
Также компилятор может заменять операции целочисленного деления, где делитель является константой или числом, битовым сдвигом, если делитель состоит из степени двойки (2 4, 8, 16, 32, 64, 128…). 2 Для этого нужно заменить деление на 2^n сдвигом вправо на n. 2
Это происходит потому, что операции битового сдвига намного быстрее сопоставляются с низкоуровневыми операциями центрального процессора. 1