Di Excel, saya perlu membuat tabel dengan semua kombinasi 1 dan 0 untuk 12 spasi.
1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1
dan seterusnya dan seterusnya, dapatkan semua kombinasi seperti
0 1 0 1 0 1 0 1 0 1 0 1
Bagaimana saya bisa melakukan ini?
microsoft-excel
Pablo Durbin Sprake Martínez
sumber
sumber
Jawaban:
Karena 2 ^ 12 = 4096, Anda membutuhkan 4096 sel (12 untuk 12 bit Anda).
Pada prinsipnya, Anda memasukkan perintah A1 ke A4096:
Itu saja, tetapi hanya berfungsi untuk 0 ... 511 (9 bit). Jadi kami menerapkan trik: kami membagi angka menjadi 3 bit dan bagian 9 bit dan menghitung dua string secara terpisah, kemudian menggabungkannya.
Maka dari itu Anda memiliki:
Sunting: Saya tidak mengetahui jumlah argumen digit opsional. Menggunakannya akan memberikan fungsi ini:
Masukkan ini ke dalam sel A1 hingga A4096.
Sunting 2: Sesuai komentar Lưu Vĩnh Phúc, ada kemungkinan OP menginginkan 12 kolom dengan masing-masing satu digit biner. Dalam hal ini, masukkan
ke semua sel A1 hingga L 4096.
sumber
Cukup salin-tempel rumus berikut di dalam
A1
:Kemudian seret-isi hingga
L4096
.Rumus ini mengekstrak bit ke-n angka (n> = 0): angka tersebut bilangan bulat dibagi 2 ^ n, kemudian menghitung modulus 2.
sumber
Pertama-tama masukkan Fungsi Buatan Pengguna berikut dalam modul standar:
Ini mengembalikan string 36 "bit". Kemudian di A1 masukkan:
dan salin melalui A4096
Di B1 masukkan:
dan salin melalui B4096 :
Fungsi yang Ditentukan Pengguna (UDF) sangat mudah dipasang dan digunakan:
Jika Anda menyimpan buku kerja, UDF akan disimpan bersamanya. Jika Anda menggunakan versi Excel di atas 2003, Anda harus menyimpan file sebagai .xlsm daripada .xlsx
Untuk menghapus UDF:
Untuk menggunakan UDF dari Excel:
Untuk mempelajari lebih lanjut tentang makro secara umum, lihat:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
dan
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
dan untuk spesifik tentang UDF, lihat:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Makro harus diaktifkan agar ini berfungsi!
sumber
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
alih-alih sel referensi. Dalam file dengan makro tidak apa-apa, tetapi dalam satu tanpa itu menciptakan popup yang menjengkelkan dan menakutkan.Cara lain saya telah menggunakan:
A1
hinggaL1
dengan nolA2
menulis=1-A1
B2
menulis=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
rumus keC2:L2
A2:L2
rumus baris ke baris3:4096
Ini menghasilkan semua string biner secara berurutan, dengan bit paling tidak signifikan pada kolom pertama. Baris terakhir (4096) adalah semuanya.
Ini tidak bergantung pada
ROW()
(sehingga dapat dipindahkan secara bebas), Anda dapat menambah panjangnya secara langsung, dan sangat mudah untuk menggeneralisasi ke string non-biner. Ini juga bekerja dengan LibreOffice Calc.sumber
Masukkan formula berikut di setiap sel dari A ke L, untuk semua baris dari 1 hingga 4096
Jika Anda ingin semuanya dalam string dengan spasi seperti apa yang Anda minta, letakkan ini di kolom terakhir
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 berikutItu 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:
Cara tercepat:
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.
sumber
Karena yang Anda cari adalah setiap 12 digit angka biner, taruhan terbaik Anda adalah menggunakan fungsi "DEC2BIN" pada setiap angka dari 0 hingga 4095 (2 ^ 12-1). Sayangnya DEC2BIN hanya bekerja hingga 8 digit sehingga rumus akhir terlihat sedikit rumit karena terdiri dari:
DEC2BIN mengambil nomor untuk dikonversi dan jumlah digit yang ingin Anda hasilkan. Saya menggabungkan 4 dan 8 untuk mendapatkan 12. Untuk menggeser 4 digit pertama hingga nilai tertinggi saya bagi dengan 256 (2 ^ 8) dan bulatkan untuk mengabaikan digit nilai yang lebih rendah lainnya. Untuk digit nilai yang lebih rendah kurangi nilai ini sehingga mereka akan terus menghitung melewati 255.
Cari konversi desimal ke biner dan pergeseran bit untuk memahami cara kerjanya.
sumber
ROUNDDOWN(A1/256,0)
Anda hanya dapat menggunakanQUOTIENT(A1, 256)
, atau bahkan lebih baikBITRSHIFT(A1, 8)
. Bagian terakhir juga dapat diganti denganBITAND
atauMOD
Jawaban yang membuat data di luar excel, tetapi menciptakan .csv yang bisa dibuka untuk mendapatkan tabel di excel.
Ini menggunakan python, tetapi bisa dilakukan dalam bahasa shell juga. Jalankan saja di cmd.exe jika python diinstal.
Ini menciptakan file (binary.csv) yang berisi konten yang diinginkan, setiap digit dalam sel yang terpisah seperti (saya pikir) diinginkan dari pertanyaan.
penjelasan:
sumber
print
kata kunci disebut seperti fungsi - dengan cara itu akan kompatibel dengan Python 2.3+ dan Python 3.0.0+