Inserisci la seguente formula in ogni cella da A a L, per tutte le righe da 1 a 4096
=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)
Se vuoi il tutto in una stringa con spazi come quello che hai chiesto, inseriscilo nell'ultima colonna
=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1
Quindi trascinare le file fino in fondo fino a M4096
Per una soluzione più generale, inserisci il numero di bit in qualche cella, come Z1, o come cella simile NumOfBitse usa la seguente formula
=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)
Può anche essere facilmente modificato per utilizzare qualsiasi cella come cella iniziale modificando l'offset di riga e colonna
Versione ottimizzata usando operazioni bit per bit invece di potenze:
=IF(BITAND(ROW() - 1, BITLSHIFT(1, 13 - COLUMN()) - 1) < BITLSHIFT(1, 12 - COLUMN()), 0, 1)
=IF(BITAND(ROW() - 1, BITLSHIFT(1, NumOfBits + 1 - COLUMN()) - 1) < BITLSHIFT(1, NumOfBits - COLUMN()), 0, 1)
Il modo più veloce:
- Copia una delle formule sopra
- Premere F5(o Ctrl+ G) e immettere A1: L4096 per selezionare l'intero intervallo
- Premi F2quindi Ctrl+ Vper incollare
- Premi Ctrl+ Shift+ Enter. Boom. Hai finito. Non è necessario trascinare
È una formula di matrice che è molto più veloce per calcolare e produrre un file molto più piccolo
Spiegazione:
Se scriviamo tutte le rappresentazioni binarie in righe dall'alto verso il basso, il ciclo di rotazione / commutazione dell'ennesimo bit (contando da lsb) è 2 n . In ogni ciclo la prima metà (da 0 a 2 n-1 -1) sarà 0 e l'ultima metà sarà 1. Ad esempio lsb (primo bit da destra) si alternerà ogni 2 1-1 = 1 bit, il secondo bit commuta ogni 2 2-1 = 2 bit ...
Di conseguenza prenderemo modulo 2 n per ottenere la posizione corrente del numero nel ciclo, se è inferiore a 2 n-1 è un bit zero, altrimenti è uno.