Java alle möglichen Kombinationen von 6 Bits ausgeben in Java?
Hi, habe einen 6bit langenen bit, also z. B. 111111 und ich möchte alle Kombinationen von Bits ausgeben, gibts dazu einen kurzen Code?
Also mit Kombinationen meine ich 000000 000001 000010?
4 Antworten
Bei Zahlen mit weniger als 10 Stellen, kannst du die Binärrepresentation der Zahl in einem int speichern und dann einfach mit printf oder String.format vorgeben, wie lang die Zahl sein soll und dass sie mit führenden Nullen geschrieben werden soll:
for (int i = 0; i<64; ++i) {
System.out.printf("%06d%n", Integer.parseInt(Integer.toBinaryString(i)));
}
Bei längeren Zahlen musst du dir was basteln, was vor der eigentlichen Zahl die gewünschte Anzahl Nullen schreibt und dann nur die rechten x Stellen des Strings ausgibt:
for (int i = 0; i<64; ++i) {
String binaryString = "0".repeat(6)+Integer.toBinaryString(i);
System.out.println(binaryString.substring(binaryString.length()-6));
}
Du kannst das über Binärzahlen machen. Im Vergleich: Wenn du die Kombination aller zweistelligen Dezimalzahlen haben möchtest (mit führenden Nullen), zählst du von 00 bis 99 und hast genau 100 Zahlen.
Alle Kombinationen von Binär 000000 bis 111111 erhältst du durch Umrechnung der Dezimal- in Binärzahlen von 0 bis 2^6-1=63
Für die Umwandlung baust du dir eine kleine Hilfe, wie @KarlRanseierlll in Kommentaren geschrieben hat: Jede Stelle der Binärzahl prüfen und entscheiden ob 0 oder 1 ausgegeben werden soll:
for(int j=5;j>=0;j--) {
System.out.print((zahl&(1<<j))?'1':'0');
}
System.out.println();
gibt viele wege ich nehme mal einen der einfach ist und didaktisch verständlich.
beispiel in javascript:
https://jsfiddle.net/u47ydav5/
var bit= 1;
for (b1=0;b1<=bit;b1++) {
for (b2=0;b2<=bit;b2++) {
for (b3=0;b3<=bit;b3++) {
for (b4=0;b4<=bit;b4++) {
for (b5=0;b5<=bit;b5++) {
for (b6=0;b6<=bit;b6++) {
document.getElementById("rechnung").innerHTML += ""+b1+b2+b3+b4+b5+b6+"<br>";
}
}
}
}
}
}
Indem Du einfach von 0 bis 2^6-1 hochzählst und den Wert als Binärstring mit Führungsnullen ausgibst.
da lern man ja gar nichts, das ist ja nur was anderes benutzen weil man es selber nicht kann lol . in python ein import und 1 befehl und man hat alle kombinationen in allen variationen drauf ... sehr spannen .
Wenn du das genau wie in deinem Beispiel haben willst, kannst du z.B. von 2^6-1 bis 0 runter zählen.
okay, aber wie lasse ich den string entstehen? Also dass als erstest irgend ein 6er Bit ausgegeben wird, danach noch ein anderer etc?
int input = 10;
String result = Integer.toBinaryString(input);
System.out.println(result); // 1010
Dann wirst Du Dir den String zusammenbauen müssen, indem Du über die 6 Stellen iterierst und jeweils schaust, ob das Bit gesetzt ist. Binary AND wäre hier eine Möglichkeit (oder nimmst Modulo).
Eine ganz andre Option wäre das ganze Rekursiv anzugehen, bei ner Tiefe von 6 ist das noch überschaubar. Damit ginge das dann it beliebigen Zeichenvorräten.
for(int i=5;i>0=;--i) (um>>i&1)?print("1"):print("0");
Das übeträgst Du zu Java und solltest fertig sein. Staat print, kannste auch an einen String anhängen, oder weiß der Geier.
Da Du bei toBinaryString nicht so recht formatieren kannst, ist das nur bedingt geeignet.
danke, aber würden so nicht auch gleiche Kombinationen zu stande kommen?
Das ist nur, um einen Integralwert zu einem Binärstring zu konvertieren, das sollte eigentlich auch num sein, naja, es geht ums Konzept.
klar, aber wie mach ich das, dass die Kombinationen ausgegeben werden, eine forschleife bis 2^6-1 ist mir klar, ich mein eher dass bei einem durchlauf z. B. 100000 ausgegeben wird danach 010000 oder halt irgendetwas anders, halt alle Kombinationen am Ende