ich brauche eure Hilfe bei einem kleinen Problem.
Und zwar sollen wir eine Konvertierung vornehmen von Dezimalzahlen zu Binärzahlen und für das ganze sollen wir ein Boolean-Array verwenden.
Vorgeben ist uns der Methodenkopf und dass die Zahl nicht mehr als 16 Bit breit sein soll (darf also nicht größer als 65535 sein).
Methodenkopf:
Java:
boolean[]dez2dual(int dezimalzahl)
Mein Ansatz ist das Ganze mit einer for-Schleife zu erledigen.
Ich weiß eben nur nicht so recht, wie ich JAVA sagen soll, dass 1=2^0 , 2=2^1 etc.
Und wie ich dann diese Binärzahl auch noch in ein Boolean-Array schreiben soll.
Könnt ihr mir bitte helfen?
Das wäre wirklich supi!
Liebe Grüße,
schnosi
P.S: Mir ist eben gerade noch etwas eingefallen. Geht das Ganze vielleicht mit Mudulo? also %
Also habe beide eben mal getestet und leider gibts bei beidem einen Fehler. Bei deinem ersten Beispiel, da sagt er mir, dass er List und ArrayList nicht finden kann und beim 2. , dass der Operator & für int und boolean unzulässig ist.
Mhhh... kannst du mir dein erstes Beispiel bitte mal etwas erklären. Ich will nicht so recht hintersteigen, was du mir damit sagen willst. Was ist mit List gemeint? und was macht List.add und List.get ?!
Und bei dem 2. würdest du da nicht auch alle anderen Zahlen bis 32 erzeugen und nicht nur 0 und 1? Vorallem was meinst du mit (1 << i) ?!
Sorry...möchte das einfach etwas besser nachvollziehen können.
Also habe beide eben mal getestet und leider gibts bei beidem einen Fehler. Bei deinem ersten Beispiel, da sagt er mir, dass er List und ArrayList nicht finden kann und beim 2. , dass der Operator & für int und boolean unzulässig ist.
Mhhh... kannst du mir dein erstes Beispiel bitte mal etwas erklären. Ich will nicht so recht hintersteigen, was du mir damit sagen willst. Was ist mit List gemeint? und was macht List.add und List.get ?!
Und bei dem 2. würdest du da nicht auch alle anderen Zahlen bis 32 erzeugen und nicht nur 0 und 1? Vorallem was meinst du mit (1 << i) ?!
Sorry...möchte das einfach etwas besser nachvollziehen können.
Du musst beim ersten Beispiel die verwendeten Klassen noch importieren (das ist inzwischen so selbstverständlich für mich, dass ich vergesse, es extra zu erwähnen):
Beim zweiten Beispiel fehlt eine Klammer, denke ich:
result = ((1 << i) & dezimalzahl) > 0;
<< ist ein "Bitshift"-Operator. a << b verschiebt die Bits in a um b Stellen nach links, was der Rechnung a*2^b entspricht. Mit 1 << i erzeuge ich also nacheinander alle nötigen Zweierpotenzen und teste mit dem bitweisen Und (&), ob dieser Stelle auch in der Zahl ein Bit gesetzt ist. Übrigens liegt Gorac daneben: In Java haben ints 32 bit. Eine Übersicht gibt es hier.
Ah okay. Dann habe ich das schon mal verstanden.
Mir ist allerdings die 1. Methode immernoch ein Rätsel. Sorry wir sind einfach bei Java noch nicht so weit fortgeschritten und deswegen wäre das wohl unangebracht, wenn ich die erste Methode nehme.
Trotzdem erstmal ganz herzlichen Dank.
Mich würde nun aber mal noch interessieren, ob man die 0 am Anfang irgendwie noch wegbekommen könnte? Ich denke, die würde schon etwas stören. Wenn's aber nicht anders ginge, dann würde ich die Methode trotzdem nehmen.
Alle anderen Vorschläge sind auch nicht so recht mit unserer Aufgabe vereinbar, glaube ich. Trotzdem auch euch herzlichen Dank.
Das Problem ist, dass man erst mal wissen muss, wie lang das Array sein soll. In der ersten Methode verwende ich eine Liste, weil die "wachsen" kann. In der zweiten Methode verwende ich ein Array mit der theoretischen Maximalgröße. Liraves Lösung berechnet die Länge mit Logarithmen. BitInteger.bitLength() wäre eine andere Variante, um die Länge des Arrays zu bestimmen.
Hier eine Variante ohne Liste, die vorher die benötigte Arraylänge ermittelt, und auch das Boolean-Array in der üblichen Lese-Richtung erzeugt (also so, dass die Reihenfolge bei java.util.Arrays.toString(array) wie bei der üblichen Schreibweise der Binärzahl ist).
Java:
publicboolean[]dez2dual(int dezimal){int bitLength =0;for(int i =31; i >=0; i--){if((dezimal &(1<< i))>0){
bitLength = i;break;}}boolean[] result =newboolean[bitLength +1];for(int i =0; i <= bitLength; i++){
result[bitLength - i]=(dezimal &(1<< i))>0;}return result;}