Reloj binario con adafruit_neopixel

No se cuales son las ultimas funciones.
El ciclo for te lo expliqué
El número 8388608 = 2^23

Serial.print(((tmp & z) == z)? '1' : '0');

Esto solo es para que muestre los 1 y 0 pero puede eliminarse igualmente te lo explico
pero mejor lo hago a continuación porque decidimos el uso de uno u otro strip

(tmp & z) esto es una comparación AND
imagina que analizamos los ultimos 8 bits de los segundos y supongamos que el número es 47 o sea en BCD
Msb Lsb
0100 0111

en este caso z para poder resolver tiene que tomar valores que van desde 128 o 2^7 hasta 0
Miremos porque? los pesos binarios van desde 0 como el Menos significativo (LSB o Less significant Bit) hasta 7 el mas significativo (MSB o More significant Bit)

128 = 1000 0000
64 = 0100 0000
32 = 0010 0000
16 = 0001 0000
8 = 0000 1000
4 = 0000 0100
2 = 0000 0010
1 = 0000 0001

entonces si haces con tu número 47 = 0100 0111 un And con cada posicion veras que pasa

47 AND 128 => 0100 0111 AND 1000 0000 => es una multiplicación BIT A BIT solo quedará en 1 si HAY UN 1 en la posicion sino dará un 0
0100 0111 AND 1000 0000 = 0000 0000
ese resultado luego se consulta contra z o sea contra 1000 0000

0000 0000 = 1000 0000 NO o sea FALSE
COmo es FALSO la respuesta es strip.setPixelColor(cont,255,255,255);  // 0

el sistema baja un valor y ahora z valdra 64
si miras 47 tiene un uno en el 6 bits o sea la respuesta sera 0100 0000 = 0100 0000 que es el valor de 64 o sea VERDADERO
por ende el if al ser verdadero hace que vaya a
strip.setPixelColor(cont,100,0,0);  // 1 

Y terminado.
La función de abajo puedes borrarla no hace falta. Fue de donde extraje la idea de arriba.