In Excel muss ich eine Tabelle mit allen Kombinationen von 1 und 0 für 12 Leerzeichen generieren.
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
und so weiter und so fort, bekommen alle Kombinationen wie
0 1 0 1 0 1 0 1 0 1 0 1
Wie kann ich das machen?
microsoft-excel
Pablo Durbin Sprake Martínez
quelle
quelle
Antworten:
Da 2 ^ 12 = 4096 ist, benötigen Sie 4096 Zellen (12 für Ihre 12 Bits).
Im Prinzip geben Sie in A1 bis A4096 den folgenden Befehl ein:
Das wäre es, aber es funktioniert nur für 0 ... 511 (9 Bit). Also wenden wir einen Trick an: Wir teilen die Zahl in einen 3-Bit- und einen 9-Bit-Teil auf, berechnen die beiden Zeichenfolgen getrennt und verknüpfen sie dann.
Sie haben also:
Bearbeiten: Mir war das optionale Argument für die Anzahl der Ziffern nicht bekannt. Wenn Sie es verwenden, erhalten Sie folgende Funktion:
Fügen Sie dies in die Zellen A1 bis A4096 ein.
Edit 2: Laut Lưu Vĩnh Phúcs Kommentar ist es möglich, dass das OP 12 Spalten mit jeweils einer Binärziffer wollte. In diesem Fall setzen
in alle Zellen A1 bis L 4096.
quelle
Kopieren Sie einfach die folgende Formel und fügen Sie sie ein
A1
:Dann ziehen Sie die Füllung auf
L4096
.Die Formel extrahiert das n-te Bit einer Zahl (n> = 0): Die Zahl ist eine Ganzzahl geteilt durch 2 ^ n. Berechnen Sie dann den Modul 2.
quelle
Geben Sie zunächst in einem Standardmodul die folgende benutzerdefinierte Funktion ein:
Dies gibt eine Zeichenkette von 36 "Bits" zurück. Dann in A1 eingeben:
und über A4096 kopieren
In B1 geben Sie ein:
und über B4096 kopieren :
Benutzerdefinierte Funktionen (UDFs) sind sehr einfach zu installieren und zu verwenden:
Wenn Sie die Arbeitsmappe speichern, wird die UDF mit dieser gespeichert. Wenn Sie eine Excel-Version später als 2003 verwenden, müssen Sie die Datei als .xlsm und nicht als .xlsx speichern
So entfernen Sie die UDF:
So verwenden Sie die UDF aus Excel:
Weitere Informationen zu Makros im Allgemeinen finden Sie unter:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
und
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
Einzelheiten zu UDFs finden Sie unter:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Makros müssen aktiviert sein, damit dies funktioniert!
quelle
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
anstelle einer Zelle verwenden Referenz. In einer Datei mit Makros ist dies in Ordnung, aber in einer Datei ohne Makros wird ein irritierendes und unheimlich aussehendes Popup erstellt.Ein anderer Weg, den ich benutzt habe:
A1
bisL1
mit NullenA2
schreiben=1-A1
B2
schreiben=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
Formel kopieren nachC2:L2
A2:L2
Zeilenformeln in Zeilen3:4096
Dadurch werden alle Binärzeichenfolgen in der angegebenen Reihenfolge mit niedrigstwertigen Bits in der ersten Spalte erstellt. Letzte Reihe (4096) sind alle.
Dies ist nicht abhängig von
ROW()
(daher kann es frei verschoben werden), Sie können die Länge direkt erhöhen und es ist einfach, auf nicht-binäre Zeichenfolgen zu verallgemeinern. Es funktioniert auch mit LibreOffice Calc.quelle
Fügen Sie in jede Zelle von A bis L für alle Zeilen von 1 bis 4096 die folgende Formel ein
Wenn Sie das Ganze in einer Zeichenfolge mit Leerzeichen wie dem, was Sie gefragt haben, wollen, setzen Sie dies in die letzte Spalte
Ziehen Sie dann die Zeilen bis M4096
Geben Sie für eine allgemeinere Lösung die Anzahl der Bits in eine Zelle wie Z1 oder eine benannte Zelle wie
NumOfBits
und verwenden Sie die folgende FormelSie kann auch einfach geändert werden, um eine beliebige Zelle als Startzelle zu verwenden, indem Sie den Zeilen- und Spaltenversatz ändern
Optimierte Version mit bitweisen Operationen anstelle von Kräften:
Schnellster Weg:
Es ist eine Matrixformel, die viel schneller berechnet und eine viel kleinere Datei erzeugt
Erläuterung:
Wenn wir alle binären Darstellungen in Zeilen von oben nach unten schreiben, beträgt der Kipp- / Umschaltzyklus des n-ten Bits (ab lsb) 2 n . In jedem Zyklus ist die erste Hälfte (von 0 bis 2 n-1 -1) 0 und die letzte Hälfte ist 1. Zum Beispiel wechselt das lsb (erstes Bit von rechts) alle 2 1-1 = 1 Bit. das zweite Bit schaltet alle 2 2-1 = 2 Bits um ...
Infolgedessen nehmen wir modulo 2 n , um die aktuelle Position der Zahl im Zyklus zu ermitteln. Wenn sie kleiner als 2 n-1 ist, ist sie ein Null-Bit, andernfalls ist sie eine Eins.
quelle
Da Sie nach jeder 12-stelligen Binärzahl suchen, ist es am besten, die "DEC2BIN" -Funktion für jede Zahl von 0 bis 4095 (2 ^ 12-1) zu verwenden. Leider funktioniert DEC2BIN nur mit bis zu 8 Ziffern, sodass die endgültige Formel aufgrund der Verkettung etwas knifflig aussieht:
DEC2BIN verwendet die zu konvertierende Zahl und die Anzahl der auszugebenden Stellen. Ich habe 4 und 8 kombiniert, um 12 zu erhalten. Um die ersten 4 Ziffern auf den höchsten Wert zu verschieben, dividiere ich durch 256 (2 ^ 8) und runde ab, um die anderen Ziffern mit dem niedrigeren Wert zu ignorieren. Bei den Ziffern mit dem niedrigeren Wert wird dieser Wert subtrahiert, damit die Zählung nach 255 fortgesetzt wird.
Suchen Sie nach Dezimal-Binär-Konvertierung und Bitverschiebung, um zu verstehen, wie dies funktioniert.
quelle
ROUNDDOWN(A1/256,0)
kannst du einfach benutzenQUOTIENT(A1, 256)
, oder noch besserBITRSHIFT(A1, 8)
. Letzterer Teil kann auch durchBITAND
orMOD
Eine Antwort, die die Daten außerhalb von Excel erstellt, jedoch eine CSV-Datei erstellt, die geöffnet werden kann, um die Tabelle in Excel abzurufen.
Dies verwendet Python, könnte aber auch in einer Shell-Sprache erfolgen. Führen Sie es einfach in cmd.exe aus, wenn Python installiert ist.
Dies erzeugt eine Datei (binary.csv), die den gewünschten Inhalt enthält, jede Ziffer in separaten Zellen, wie (ich denke) von der Frage gewünscht.
Erläuterung:
quelle
print
Schlüsselwort wie eine Funktion aufgerufen wird - auf diese Weise wird es mit Python kompatibel sein 2.3+ und Python 3.0.0+