¿Cómo funciona esta torre iterativa de Hanoi? C [duplicado]

Posible duplicado:
¿Como funciona esto? Torres extrañas de la solución de Hanoi

Mientras navegaba por Google, encontré esta solución interesante para Tower Of Hanoi que ni siquiera usa la pila como estructura de datos.

¿Alguien puede explicarme brevemente, qué está haciendo realmente?

¿Es esta solución realmente aceptable?

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;
}

Actualización: ¿Qué está haciendo el número 3 codificado aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta