Conhecer os operadores bitwise, além de ajudar a resolver alguns problemas, também podem ser utilizados para melhorar o desempenho da execução do código. Para rever/aprender sobre esses operadores, consulte www.galirows.com.br/meublog/programacao/operadores-bitwise-cpp/
Por exemplo, a multiplicação por valores que são fatores de 2 apresenta melhor desempenho se for feita por deslocamento de bits do que pelo uso do operador de multiplicação. Vale lembrar que cada left shift (<<) em um valor é o mesmo do que multiplicar ele por dois.
Considerando o código abaixo e sua execução utilizando a linha 6 que utiliza o operador de multiplicação, o tempo de execução do algoritmo é entorno de 2,01 segundos. Ao invés disso, utilizando a operação left shift da linha 7, o tempo de execução é entorno de 1,99 segundos. A diferença foi mínima, mas foi suficiente para o algoritmo executar em menos de 2 segundos, o que pode ser a diferença entre ter um timeout no tempo de execução da solução.
#include <stdio.h>
int main(void) {
int t=1;
for (int i=0; i<999999999; i++) {
t*=2;
//t = t>>1;
}
return 0;
}
A diferença no tempo de execução aumenta conforme se aumenta o valor pelo qual é feita a multiplicação. Por exemplo, para multiplicar o valor por 6 (t*=6 e t>>3), os tempos são 2,25 segundos e 1,99 segundos, para o operador de multiplicação e left shift, respectivamente.