Ayuda explicacion de este codigo

Overmachine
16 de Septiembre del 2009
Hola soy nuevo, y quisiera que me ayudaran a entender este codigo

Código:
#include <stdio.h>
#include <limits.h>

int main(void) {
char cir, dsp;

for(cir = 0 ; cir < CHAR_BIT * 2; cir++) {
for(dsp = 0 ; dsp < CHAR_BIT / 2; dsp++)
printf("S%d[%d]t", dsp + 1, cir >> dsp & 1 );
printf( (cir & 1) &&
((cir >> 1 & 1) ||
( cir >> 2 & 1) ||
( cir >> 3 & 1)) ? "Cerradonn" : "Abiertonn");

}
return 0;
}



quisiera que me explicaran para que sirve el segundo ciclo for, tambien el uso de los & "and" y si se podrian cambiar por otra sentencia. apreciaria mucho tu ayuda. si lo compilan podran saber que hacen, el codigo estaba aki http://www.elrincondelc.com/nuevorincon/foros/viewtopic.php?t=8516&highlight=&sid=6134bb21a6c190974bc9d95e9a93a108 entenderan de que se trata. gracias