Dezimal > Binär-Umrechnung Logikfehler?

zenpaticx

Mitglied
Hallo,

habe folgenden Code:
Java:
  double z1 = 27.0;
  double z2 = 2.0;
  int i = 0;
   
  boolean[] bA = new boolean[8];
   
  while (z1 >= 0) {
  z1 /= z2;
   
  if (z1 % 2.0 == 0.0) {
  bA[i] = false;
  } // end of if
   
  else {
  bA[i] = true;
  z1 -= 0.5;
  } // end of if-else
   
  i++;
  } // end of while
   
  for (int j = 0; j < 8; j++) {
  System.out.println(j + ". Stelle: " + bA[j]);
  } // end of for
Um es kurz zu demonstrieren wie man eine Dezimalzahl in Binär umrechnen kann:
27 / 2 = 13,5 => 1
13 / 2 = 6,5 => 1
6 / 2 = 3 => 0
3 / 2 = 1,5 => 1
1 / 2 = 0,5 => 1

Und dann von unten nach oben (hier blöd, weil es wie ein Palindrom ist).
Das Problem bei meinem Code ist, dass er auch bei gerade Zahlen (hier 6 & 3) nicht in die If-Anweisung springt. Ist das ein Logikfehler, oder was ist das Problem?

Falls jemand eine Idee hat, bitte nicht den Code poste, nur eine Anregung 🙂

Frohes Osterfest und viele Grüße
 
Also ich würde alles int oder long machen. Sodann darfst du nicht zu Beginn deiner Schleife durch 2 dividieren. Das muss ans Ende der Schleife. Und die Schleifenbedingung müsste sein while (zahl > 0). Und dieses subtrahieren von 0.5 kannst du dir natürlich auch sparen. Mit diesen Änderungen geht es dann
 
Ach so, noch was: dein Beispiel geht so:

Um es kurz zu demonstrieren wie man eine Dezimalzahl in Binär umrechnen kann:
27 % 2 = 1
27 / 2 = 13 % 2 = 1
13 / 2 = 6 % 2 = 0
6 / 2 = 3 % 2 = 1
3 / 2 = 1 % 2 = 1
 
@JStein52 danke für die Antworten. Gut, dass es auch mit Integern funktioniert, da habe ich es mir wohl zu kompliziert gemacht 😀

For future reference:
Java:
int iZahl = 27;
  int i = 0;
  boolean[] bA = new boolean[8];
  
  while (iZahl >= 0 && i < 8) {
  if (iZahl % 2 != 0) {
  bA[i] = true;
  } // end of if
  
  else {
  bA[i] = false;
  } // end of if-else
  
  iZahl /= 2;
  i++;
  } // end of while
 
Gerne aber du machst es dir immer noch ein bisschen unnötig schwer dadurch dass du dich auf max. 8-Bit Zahlen beschränkst. Schöner wäre es wenn du dein Bit-Array passend zum Datentyp deiner Eingabezahl dimensionierst. Bei dir wäre das int, könnte aber z.B. auch long sein. Und dann würde das so aussehen:

Code:
 int iZahl = 27;
  int i = 0;
  boolean[] bA = new boolean[Integer.SIZE];
  while (iZahl > 0) {
     if (iZahl % 2 != 0) {
        bA[i] = true;
     } // end of if
     else {
        bA[i] = false;
     } // end of if-else
     iZahl /= 2;
     i++;
  } // end of while
 
oder noch einfacher: du baust dir einen String bestehend aus 0 und 1 auf:

Code:
  int iZahl = 27;
  String binaerZahl = "";
  while (iZahl > 0) {
     binaerZahl = iZahl%2 + binaerZahl;
     iZahl /= 2;
  } // end of while

  System.out.println(binaerZahl);
 
@JStein52 stimmt - dann wäre ich nicht auf 8 Bit beschränkt, nur finde ich bei der Version mit Iteger.SIZE, dass es nicht so schön aussieht, wenn 32 Zeilen mit False stehen 😀

Aber die Idee mit dem String ist echt genial - vielen Dank!
 

Zurück
Oben