Dezimal in Binaerumrechner - Frage zum Programm



  • Also ich bin gerade dabei mir C++ beizubringen und wollte ein Programm schreiben, das Dezimalzahlen in Binärzahlen umwandelt. Da ich alleine nicht weitergekommen bin, habe ich im Internet geguckt und bin dabei auf folgenden Code gestossen:

    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int PrintBin(int i);
    
    int main()
    {
        int iEingabe = 0;
    
        cout << "Geben Sie eine Zahl ein, welche konvertiert werden soll:" << endl;
        cin >> iEingabe;
        cout << "Zahl in Binaer: " << endl;
        PrintBin(iEingabe);
        cout << endl;
        system("pause");
        return 0;
    }
    
    int PrintBin(int i)
    {
        if (i!=0) {
            PrintBin(i/2);
            if ((i % 2) == 0) {
                cout << "0";
            }
            else {
                cout << "1";
            }
        }
    }
    

    Das Programm funktioniert auch super, aber ehrlich gesagt frage ich mich WARUM 😃 Also wenn man jetzt als Beispiel die Zahl 23 nimmt, dann kommt ja als erster Rest 1 raus. Aber wieso bricht die Funktion an der Stelle nicht ab, sondern "weiß", wann der Binärcode zuende ist? Ich hätte zum Beispiel eher daran gedacht, das Problem mit einer while-Schleife zu lösen, die Werte in einem Array zu speichern und diesen dann rückwärts auszugeben. Ist wahrscheinlich ein ganz blöder Denkfehler, aber ich steh grad echt aufm Schlauch. Danke schonmal im Voraus.


  • Mod

    23:
    printbin(23/2 = 11)
    ->11:
      printbin(11/2 = 5)
    -->5:
       printbin(5/2 = 2)
    --->2:
        printbin(2/2 = 1)
    ---->1:
         printbin(1/2 = 0)
    ----->0:
          Abbruch weil nicht i!=0
         1%2 == 1
         Ausgabe 1
       2%2 == 0
       Ausgabe 0
      5%2 == 1
      Ausgabe 1
     11%2 == 1
     Ausgabe 1
    23%2 == 1
    Ausgabe 1
    

    Gesamtausgabe 10111. Passt.

    Analog im Dezimalsystem, da kann man es besser nachvollziehen. Eingabe 512:

    512:
    512/10 = 51
     51:
     51/10 = 5
      5:
      5/10 = 0
       0 -> Keine Ausgabe
      5%10 = 5 -> Ausgabe 5
     51%10 = 1 -> Ausgabe 1
    512%10 = 2 -> Ausgabe 2
    Gesamt: 512
    


  • Cool, vielen Dank! Hab das i!=0 irgendwie außer Acht gelassen, aber jetzt ist es natürlich logisch!


Anmelden zum Antworten