Masukkan formula berikut di setiap sel dari A ke L, untuk semua baris dari 1 hingga 4096
=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)
Jika Anda ingin semuanya dalam string dengan spasi seperti apa yang Anda minta, letakkan ini di kolom terakhir
=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1
Lalu seret baris sampai M4096
Untuk solusi yang lebih umum, masukkan jumlah bit dalam beberapa sel, seperti Z1, atau sel bernama NumOfBits
dan gunakan rumus berikut
=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)
Itu juga dapat dengan mudah dimodifikasi untuk menggunakan sel apa pun sebagai sel awal dengan mengubah offset baris dan kolom
Versi yang dioptimalkan menggunakan operasi bitwise bukannya kekuatan:
=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)
Cara tercepat:
- Salin salah satu rumus di atas
- Tekan F5(atau Ctrl+ G) dan masukkan A1: L4096 untuk memilih seluruh rentang
- Tekan F2lalu Ctrl+ Vuntuk menempel
- Tekan Ctrl+ Shift+ Enter. Ledakan. Kamu sudah selesai. Tidak perlu diseret
Ini adalah formula array yang jauh lebih cepat untuk menghitung dan menghasilkan file yang jauh lebih kecil
Penjelasan:
Jika kita menulis semua representasi biner dalam baris dari atas ke bawah, siklus flipping / toggling dari bit-n (menghitung dari lsb) adalah 2 n . Dalam setiap siklus, setengah pertama (dari 0 hingga 2 n-1 -1) akan menjadi 0 dan setengah terakhir adalah 1. Misalnya lsb (bit pertama dari kanan) akan berganti setiap 2 1-1 = 1 bit, bit kedua akan beralih setiap 2 2-1 = 2 bit ...
Sebagai hasilnya, kita akan mengambil modulo 2 n untuk mendapatkan posisi nomor saat ini dalam siklus, jika kurang dari 2 n-1 itu nol sedikit, selain itu satu.