Dezimalzahlen in Binärzahlen umwandeln



  • Ich als C++ Newbie habe folgendes Problem: Ich möchte so simpel wie möglich eine Dezimalzahl in eine Binärzahl umwandeln. Leider haben mir dabei die anderen Beiträge diesbezüglich wenig weitergeholfen... Wäre dankbar wenn mir jemand einen quellcode schreiben würde anhand dem ich das nachvollziehen kann. Vielen Dank!!! 🙂

    Wissen ist Macht....



  • weißt du, wie man das von hand macht?



  • Ich verstehe deine Frage nicht



  • wie du eine dez zahl in eine binär zahl auf einem stück papier umrechnest!
    Wenn du das kannst sollte es progrmm technisch kein problem darstellen!



  • Achso klar weiß ich das! Is ja immer Modulu 2, d.h. Dezimalzahl%2 ergibt den Rest. Mein Problem is nur die Schleife, da der Nicht-Rest-Anteil ja wieder weiterverarbeitet werden muss. Damit meine ich:

    z.B. 13/2 = 6 Rest 1
    6/2 = 3 Rest 0 <--- Das muss automatisch passieren sonst könnte ich es ja gleich auf nem Bierdeckel ausrechnen 😃



  • do
    {
    was auch immer;
    }
    while (REST == 0);



  • donzero schrieb:

    wie du eine dez zahl in eine binär zahl auf einem stück papier umrechnest!
    Wenn du das kannst sollte es progrmm technisch kein problem darstellen!

    Doch tut es mein bester ich weiß auch nicht wieso...



  • Da muss ja auch noch ein Zähler rein weil das ganze ja nur 8 mal hintereinander ablaufen muss. Da ich echt kein plan mehr habe würde ich sagen du schreibst das mal schnell und verbreitest dein wissen unter den dummen hehe



  • Ja gut ... kannst du dennw as mit der schleife anfangen die ich oben geschrieben habe?! Das müsste dich dochin die richtige Richtung lenken 😉
    //EDIT Warum 8 mal ?! kann doch auch weniger oder mehr sein!?



  • Diron schrieb:

    z.B. 13/2 = 6 Rest 1
    6/2 = 3 Rest 0

    na siest du! jetzt mußt du nur das verfahren in ein programm uwandeln.

    so in etwa:

    zahl nehmen.
    zahl%2 => nächste stelle der binärzahl
    zahl=zahl/2
    wenn zahl noch nicht 0:
    von vorne anfangen

    jetzt kannst du das in ein programm umwandeln, immer eins nach dem anderen.



  • Da gibt es schon einen Beitrag in der C++-FAQ zu.
    Zusätzlich eventuell interessant: Wikipedia

    Caipi



  • Binärzahlen haben doch ne länge von 8 Zeichen.

    Wegen 2^0 2^1 usw. Hat man alles mal gelernt.
    11010101 <--- 213 hehe

    Ich sagte doch das ich es algorithmisch nicht so drauf habe weil ich mich damit genau seit heute morgen um 9:13 befasse...



  • es kommt immer darauf an wieviel bit die binärzahl hat! Ich frage mich gerade was du so gelernt hast 😉



  • Diron schrieb:

    Binärzahlen haben doch ne länge von 8 Zeichen.

    und was haben dezimalzahlen für eine länge? 😉

    Hat man alles mal gelernt.

    jaja, immer das risiko, was falsches zu lernen...



  • Kann man das nicht einfacher aufs Blatt bringen! Is mir echt viel zu stressig 2000 Zeilen Code wegen so ner pissigen Aufgabe zu schreiben 😮



  • was erwartest du denn! wenn du es nich selber probieren willst tuts mir leid!
    aber wie gesagt
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39490.html
    da is was



  • Wieso gibts dafür eigentlich keinen Manipulator wie für oct, hex usw.? Hab mal gehört es gibt nen Befehl wie setbase. Könnte man es damit auch schaffen?
    Das geht jedenfalls nicht: cout << setbase(2) << [Zahl] << endl;
    Wär ja auch zu geil... 😃



  • Jetzt übertreib mal nicht:
    So gehts z.B. auch kürzer, dafür aber nicht so komfortabel 😉 (Da beschränkt auf den Wertbereich von unsigned int)

    unsigned int decToBin(int x)
    {
         unsigned int y = 0;
         while(x > 0)
         {
               y = y * 10 + (x % 2);
               x /= 2;
         }
         return y;
    }
    

    Caipi



  • Ich schau mir das jetzt mal in Ruhe an. Vielen Dank Caipi und PROST! 🙂
    Bald is wieder sommer und da vernichte ich dich literweise hehe



  • FÜR CAIPI

    :-)#include <iostream> // für io
    #include <sstream> // für's umwandeln
    #include <algorithm> // für's umdrehen
    
    using std::string;
    using std::ostringstream;
    
    string binary( unsigned int zahl )
    {
    ostringstream os; // hier drin binärziffern sammeln
    
    for ( int i = zahl; i != 0; )
    {
    // es wird immer das rechte bit untersucht
    // wenn zahl ungerade (Bit 0 == 1),
    // 1 an den ostringstream hängen, sonst 0
    if (i & 1) 
    os << "1";
    else 
    os << "0";
    
    i >>= 1; // nach rechts shiften, um nächste 
    // binärziffer zu untersuchen 
    // (entspricht teilen durch zwei)
    }
    
    string dualzahl = os.str(); // in string kopieren
    
    std::reverse( dualzahl.begin(), dualzahl.end() ); // string umdrehen
    
    return dualzahl;
    }
    
    void wait()
    {
    // warten
    char c;
    std::cin >> c;
    }
    
    int main(void)
    {
    std::cout << "Ergebnis: " << binary( 439828 ); 
    
    wait();
    return 0;
    };
    

Anmelden zum Antworten