Tenemos un contador de 3 bits, por ejemplo:
c b a
0 | 0 0 0
1 | 0 0 1
2 | 0 1 0
3 | 0 1 1
4 | 1 0 0
5 | 1 0 1
6 | 1 1 0
7 | 1 1 1
Fíjate que la condición para que un bit cambie de 1 a 0 ó de 0 a 1 es que los bits inmediatamente anteriores (los menos significativos)
deben ser TODOS iguales a 1. Es por eso que se tienen operaciones "and" entre bits.
Ahora, la operación "xor" es para hacer que el bit observado haga toggle de 1 a 0 ó de 0 a 1 SOLAMENTE si las operaciones and dan como
resultado un 1
Entonces, para contadores de 4 bits:
a = a xor (b and c and d) Si AND entre b, c y d = 1, a cambia
b = b xor (c and d) Si AND entre c y d = 1, b cambia
c = c xor d Si d es 1, c cambia
d = not d d siempre cambia
Espero que se entienda.
Ahora, la finalidad de los contadores verticales, supongo es para ahorrar registros cuando los contadores son menos de 8, o cuando son de
mas de 8 bits.
No conocia este sistema de conteo, muy interesante.