quarta-feira, 16 de março de 2011

Dicas de Programação: 2 elevado a N

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: