Normalmente, para fazer a expressão acima, eu faria da seguinte maneira:
int n = 10;
int resultado = 1;
for (int i = 0; i < n; i++) {
resultado *= 2;
}
Mas um colega me passou a seguinte artimanha:
int n = 10;
int resultado = 1 << n;
E o legal, que mesmo mudando o n (variei de 1 a 10), o resultado dos dois é igual!
Mas, por que isso ocorre?
Por causa que o computador trabalha com números binários!
Hum... Vejamos como explicar: o número 1 é definido como:
int i = 1; //00000001 (bits)
Se deslocarmos os bits para esquerda com o operador <<:
i = i << 1; //00000010 (bits)
Temos que o resultado é 2!
E se deslocarmos de novo:
i = i << 1; //00000100 (bits)
O valor virou 4!
Concluimos que se deslocarmos um bit para esquerda, sempre multiplicaremos este número por 2. Então, se deslocarmos "n" bits para esquerda, multiplicaremos por 2 "n" vezes, o que equivale a 2 elevado a "n" !
Eureka! :P
Valeu pela dica! ;)
Nenhum comentário:
Postar um comentário