Como esta Torre iterativa de Hanói funciona? C [duplicado]

Possível duplicado:
Como é que isso funciona? Torres estranhas da solução de Hanói

Ao navegar no Google, encontrei esta solução interessante para o Tower Of Hanoi, que nem usa pilha como estrutura de dados.

Alguém pode me explicar resumidamente, o que está realmente fazendo?

Esta solução é realmente aceitável?

Código

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n, x;
   printf("How many disks?\n");
   scanf("%d", &n);
   printf("\n");
   for (x=1; x < (1 << n); x++)
      printf("move from tower %i to tower %i.\n",
         (x&x-1)%3, ((x|x-1)+1)%3);
return 0;
}

Atualização: O que o número 3 codificado está fazendo aqui?

questionAnswers(2)

yourAnswerToTheQuestion