Binaräres Format in Dezimalformat umwandeln u. dabei die Zwischenschritte ausgeben

  • Themenstarter Themenstarter Gelöschtes Mitglied 17508
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 17508

Gast
Hallo Forum!

Ich habe ein etwas ungewöhnliches anliegen!
Ich muss ein binäres Format in eine Dezimalzahl umwandeln, dabei brauche ich aber nicht das Endergebnis, sondern die 1ser, die gesetzt sind und die damit erhaltenen Zwischenschritte.

Was ich damit genau meines als Bsp:

Die Zahl 9 = 1001

Nun muss ich wissen, dass sich die Zahl 9 aus den einzelnen Zahlen 2^3 und 2^0 zusammensetzt, ergibt also die Dezimalzahl 8 und 1.
Was ich also letzten Endes benötige sind die Zahlen 8 und 1!

Einen Java Code hierzu habe ich bereits angefangen und ich weiss auch, wie ich mir das ganze zusammenbauen könnte, jedoch ist es extrem umständlich und ich wollte fragen, ob es eine einfachere Methode dafür vll. gibt?

Hier mal mein angefangener Code:

Java:
        Integer IntgreaterZero = new Integer(9);
        String binaryString = Integer.toBinaryString(IntgreaterZero);
        int length = binaryString.length();
        System.out.println("Laenge: " + length);
        StringBuffer buff = new StringBuffer(binaryString);
        String PositionOfOnes = buff.toString();
        ArrayList<Integer> myList = new ArrayList<Integer>();
        for (int i = -1; (i = PositionOfOnes.indexOf("1", i + 1)) != -1; ) {
            myList.add(i);
            System.out.println("1: " + i);
        }
        for ( Object x : myList )
            System.out.println("bitError: " + x);

Über die Länge des gesamten Strings kann ich mal erfahren, wieviele Binärstellen es geben wird u. ich weiss auch, wo die 1ser gesetzt sind, jedoch halte ich das Ganze ein wenig für zu kompliziert programmiert, vll. kann mir jemand eine kürzere Variante zeigen?

Ich danke Euch vielmals!

lG
 
Zuletzt bearbeitet von einem Moderator:
Ja, die Umwandlung in String ist nicht nötig. Arbeite lieber mit Bit-Masken. Nachfolgender Java Code als Denkansoß:
Java:
  public static void main(String[] args) throws Exception {

    int value = 9;
    
    // Binary String zur Kontrolle ausgeben
    System.out.println(Integer.toBinaryString(value));

    // Maske, bei der das letzte Bit auf 1 gesetzt ist.
    int mask = 1;
    
    for (int i = 0; i < Integer.SIZE ; i++) {

      // Binäre UND-Verknüpfung von value und mask
      int binaryValue = value & mask;
      
      // Ich gebe hier den Wert nur aus.
      // Du kannst prüfen, ob der Wert ungleich 0 ist
      // und ihn Dir in Deiner Liste speichern
      System.out.println("Binary value at position " + i + " is " + binaryValue);
      
      // Das gesetzte Bit einen nach links verschieben
      mask = mask << 1;
    }
  }
 
Zuletzt bearbeitet von einem Moderator:
Gelöscht, weil es nicht stimmte, was ich hier geschrieben habe. Die Aufaddierung funktioniert auch mit negativen Zahlen.
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

Danke Dir vielmals!

Genau diese Idee hatte ich auch, aber leider habe ich keine Ahnung mehr, wie das ging ( tja, die erste Klasse ist schon länger vorbei 🙂 ).
Jetzt ist es wieder an der Zeit sich damit zu beschäftigen.

Deine Variante hat mir das Leben sehr erleichtert, danke Dir vielmals!

lG
 

Neue Themen


Zurück
Oben