xor swap

Motivado pelo Log4Dev, quero contar sobre um truque legal: o xor swap (também conhecido por triple-xor trick).

O xor swap é um truque para trocar o conteúdo de 2 variáveis sem usar uma terceira. Em C, o jeito normal de trocar dois ints (x e y) é:

temp = x;
x = y;
y = temp;

Com o xor swap, o código fica:

x = x ^ y;
y = x ^ y;
x = x ^ y;

E aí pronto, suas variáveis estão invertidas. Pode acreditar (ou ler uma explicação bem mais detalhada). Legal né?

E qual a aplicação disso? Bem, um dia os microcontroladores tiveram quantidades bem escassas de memória, e jogar um int fora para variável temporária assim estava fora de cogitação. Hoje muitos microcontroladores tem uma RAM razoável e a perda de legibilidade e manutenibilidade acarretadas não vale mais a pena para estes controladores. Para os que vivem no cruel mundo dos 128 bytes de RAM, ainda vale a pena.

Publicado em C. Tags: . Deixar um comentário »

Deixe uma resposta