W programie Excel muszę wygenerować tabelę ze wszystkimi kombinacjami 1 i 0 dla 12 spacji.
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
i tak dalej, i tak dalej, otrzymując wszystkie kombinacje, takie jak
0 1 0 1 0 1 0 1 0 1 0 1
W jaki sposób mogę to zrobić?
microsoft-excel
Pablo Durbin Sprake Martínez
źródło
źródło
Odpowiedzi:
Ponieważ 2 ^ 12 = 4096, potrzebujesz 4096 komórek (12 dla 12 bitów).
Zasadniczo wstawiasz do A1 do A4096 to polecenie:
To by było na tyle, ale działa tylko dla 0 ... 511 (9 bitów). Dlatego stosujemy sztuczkę: dzielimy liczbę na 3-bitową i 9-bitową część i obliczamy dwa ciągi oddzielnie, a następnie łączymy je.
Dlatego masz:
Edycja: Nie wiedziałem o opcjonalnym argumencie liczby cyfr. Korzystanie z niego da tę funkcję:
Umieść to w komórkach A1 do A4096.
Edycja 2: Zgodnie z komentarzem Lưu Vĩnh Phúca możliwe jest, że OP chciał 12 kolumn z jedną cyfrą binarną każda. W takim przypadku umieść
do wszystkich komórek A1 do L 4096.
źródło
Wystarczy skopiować i wkleić w środku następującą formułę
A1
:Następnie przeciągnij i wypełnij do
L4096
.Formuła wyodrębnia n-ty bit liczby (n> = 0): liczba jest liczbą całkowitą podzieloną przez 2 ^ n, a następnie oblicz moduł 2.
źródło
Najpierw wprowadź następującą funkcję zdefiniowaną przez użytkownika w standardowym module:
Zwraca ciąg 36 „bitów”. Następnie w A1 wprowadź:
i skopiuj do A4096
W B1 wpisz:
i skopiuj do B4096 :
Funkcje zdefiniowane przez użytkownika (UDF) są bardzo łatwe w instalacji i obsłudze:
Jeśli zapiszesz skoroszyt, UDF zostanie z nim zapisany. Jeśli używasz wersji Excela późniejszej niż 2003, musisz zapisać plik jako .xlsm zamiast .xlsx
Aby usunąć UDF:
Aby użyć UDF z Excela:
Aby dowiedzieć się więcej o makrach, zobacz:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
i
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
a szczegółowe informacje na temat UDF można znaleźć:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Makra muszą być włączone, aby to działało!
źródło
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
zamiast komórki odniesienie. W pliku z makrami jest w porządku, ale w jednym bez tworzy irytujące i przerażające wyskakujące okienko.Inny sposób użyłem:
A1
doL1
zeramiA2
piśmie=1-A1
B2
piśmie=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
formułę doC2:L2
A2:L2
formuły wierszy do wierszy3:4096
To produkuje wszystkie ciągi binarne w kolejności, z najmniej znaczącymi bitami w pierwszej kolumnie. Ostatni wiersz (4096) to wszystko.
Nie zależy to od
ROW()
(więc można go swobodnie przenosić), możesz bezpośrednio zwiększyć długość i łatwo jest uogólnić na ciągi niebinarne. Działa również z LibreOffice Calc.źródło
Umieść następującą formułę w każdej komórce od A do L, dla wszystkich wierszy od 1 do 4096
Jeśli chcesz wszystko w ciągu ze spacjami takimi jak to, o co prosiłeś, umieść to w ostatniej kolumnie
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łyMoż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ń:
Najszybszy sposób:
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.
źródło
Ponieważ szukasz każdej 12-cyfrowej liczby binarnej, najlepszym rozwiązaniem jest użycie funkcji „DEC2BIN” dla każdej liczby od 0 do 4095 (2 ^ 12-1). Niestety DEC2BIN działa tylko do 8 cyfr, więc końcowa formuła wygląda nieco skomplikowana, ponieważ jest to konkatenacja:
DEC2BIN pobiera liczbę do konwersji i liczbę cyfr, które chcesz wyprowadzić. Połączyłem 4 i 8, aby uzyskać 12. Aby przesunąć pierwsze 4 cyfry w górę do najwyższej wartości, dzielę przez 256 (2 ^ 8) i zaokrąglam w dół, aby zignorować pozostałe cyfry o niższej wartości. Dla cyfr o niższej wartości odejmij tę wartość, aby kontynuować liczenie po 255.
Wyszukaj konwersję dziesiętną na binarną i przesunięcie bitów, aby zrozumieć, jak to działa.
źródło
ROUNDDOWN(A1/256,0)
ciebie możesz po prostu użyćQUOTIENT(A1, 256)
lub nawet lepiejBITRSHIFT(A1, 8)
. Tę ostatnią część można również zastąpićBITAND
lubMOD
Odpowiedź, która tworzy dane poza programem Excel, ale tworzy plik .csv, który można otworzyć, aby uzyskać tabelę w programie Excel.
Używa Pythona, ale można to również zrobić w języku powłoki. Wystarczy uruchomić go w cmd.exe, jeśli jest zainstalowany Python.
Spowoduje to utworzenie pliku (binary.csv), który zawiera pożądaną treść, a każda cyfra w osobnych komórkach jest (jak sądzę) pożądana z pytania.
wyjaśnienie:
źródło
print
zapewnić zgodność z poprzednimi wersjami, dodaj nawiasy klamrowe, aby słowo kluczowe było wywoływane jak funkcja - w ten sposób będzie ono kompatybilne z Python 2.3+ i Python 3.0.0+