Umieść następującą formułę w każdej komórce od A do L, dla wszystkich wierszy od 1 do 4096
=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)
Jeśli chcesz wszystko w ciągu ze spacjami takimi jak to, o co prosiłeś, umieść to w ostatniej kolumnie
=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1
Następnie przeciągnij rzędy do końca, aż do M4096
Aby uzyskać bardziej ogólne rozwiązanie, umieść liczbę bitów w jakiejś komórce, na przykład Z1, lub nazwie podobnej komórki NumOfBits
i użyj następującej formuły
=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)
Można go również łatwo zmodyfikować, aby używał dowolnej komórki jako komórki początkowej, zmieniając przesunięcie wiersza i kolumny
Zoptymalizowana wersja wykorzystująca operacje bitowe zamiast uprawnień:
=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)
Najszybszy sposób:
- Skopiuj jedną z powyższych formuł
- Naciśnij F5(lub Ctrl+ G) i wprowadź A1: L4096, aby wybrać cały zakres
- Naciśnij, F2a następnie Ctrl+, Vaby wkleić
- Naciśnij Ctrl+ Shift+ Enter. Bum. Jesteś skończony. Nie trzeba przeciągać
Jest to formuła tablicowa, która jest znacznie szybsza do obliczenia i utworzenia znacznie mniejszego pliku
Wyjaśnienie:
Jeśli napiszemy wszystkie reprezentacje binarne w rzędach od góry do dołu, cykl odwracania / przełączania n-tego bitu (licząc od lsb) wynosi 2 n . W każdym cyklu pierwsza połowa (od 0 do 2 n-1 -1) będzie wynosić 0, a ostatnia połowa będzie wynosić 1. Na przykład lsb (pierwszy bit od prawej) będzie się zmieniał co 2 1-1 = 1 bit, drugi bit będzie się przełączał co 2 2-1 = 2 bity ...
W rezultacie weźmiemy modulo 2 n, aby uzyskać bieżącą pozycję liczby w cyklu, jeśli jest mniejsza niż 2 n-1 , jest to zero bitów, w przeciwnym razie to jeden.