terça-feira, 2 de dezembro de 2014

Programação em C - Trocar números (modo Chuck Norris)

Olá pessoal, nesse post iremos ver um código bem curioso em C que troca os valores de duas variáveis do tipo int (inteiro).

Por que é modo Chuck Norris? Porque a princípio pode não ser tão fácil de fazer e nem de entender. Chuck Norris approves.

Veja o código:


Na linha 7 temos a declaração de duas variáveis do tipo int (inteira).

O que acontece na linha 8 é uma atribuição XOR bit a bit.

Se não lembra da disjunção exclusiva, clique aqui.

A linha 8 é avaliada da direita para esquerda.

b = 5 => 0101 (em binário)
a = 10 => 1010 (em binário)
a ^= b é o mesmo que a = a ^ b
a = 1010 XOR 0101
XOR é disjunção exclusiva, é verdade quando os valores lógicos são contrários.
a = 1111
b = b ^ a
b = 0101 XOR 1111
b = 1010
a = a ^ b
a = 1111 XOR 1010
a = 0101

Fácil não é mesmo? :)


Nenhum comentário: