Dezimalzahl in Binaer darstellen



  • Hallo, ich will Dezimalzahlen in Binaer darstellen. Habe folgende code geschrieben:

    while(bin > 0)
    {
    if ( bin % 2 == 0)
    cout << "0";

    if (bin % 2 == 1)
    cout << "1";

    bin /=2;
    }

    bekomme aber falsche Ergebnis.

    z.b. für 8 bekomme ich 0001 und nicht 1000

    danke und lg
    roni



  • Hast du auch eine Frage?

    Übrigens, dein Ergebnis ist nicht wirklich falsch, nur rückwärts.



  • sieht so aus als wenn du die nicht ausgeben sollst, sondern in nem array speicherst. dann wenn fertig musst das array auslesen von hintenrum. sprich array[n]....array[0].



  • lol wie ich es liebe wenn ich während ich beitrag schreibe, einer schon schneller war. ist fast wie bei betrugbay



  • die zweite Abfrage
    if (bin % 2 == 1)
    kannst du dir sparen, denn das ist der else-Zweig der ersten (außer 0 oder 1 gibt es keine anderen möglichen Ergebnisse bei mod2 :-))
    btw:
    if(bin % 2 == 0) entspricht if(!(bin % 2))
    und
    if(bin % 2 == 1) entspricht if(bin % 2)



  • Hi, roniu

    Bitte benutz doch die CodeTags
    möglich lösung:

    // needs #include <string>
    
    unsigned int bin = 2000;
    
    std::string bin_out;
    while(bin > 0)
    {
    if ( bin % 2 == 0)
      bin_out += '0';
    else
      bin_out += '1';
    bin /=2;
    }
    
    bin_out = std::string(bin_out.rbegin(),bin_out.rend()); // Umkehren
    // Ausgeben
    std::cout << bin_out << std::endl;
    


  • @eViLiSSiMo: was ist mit einer initialisierung von bin_out ??
    zB std::string bin_out="";



  • freshman schrieb:

    @eViLiSSiMo: was ist mit einer initialisierung von bin_out ??
    zB std::string bin_out="";

    Normalerweise sollte das imo nicht nötig sein da std::string eine Klasse ist.

    aber wenn dann nicht std::string bin_out = ""; // erzeugt temporäre Instanz

    sondern -> std::string bin_out("");



  • Danke an alle die so schnell geantworted haben.

    Eine Frage an eViLiSSiMo: wieso hast du

    unsigned int bin = 2000;
    

    geschrieben. Sorry ich habe letzte Woche mit C++ angefangen und villeicht klingt wie eine blöde Frage aber warum bin = 2000? Warum nicht 1000 oder 3000??



  • roinu schrieb:

    Danke an alle die so schnell geantworted haben.

    Eine Frage an eViLiSSiMo: wieso hast du

    unsigned int bin = 2000;
    

    geschrieben. Sorry ich habe letzte Woche mit C++ angefangen und villeicht klingt wie eine blöde Frage aber warum bin = 2000? Warum nicht 1000 oder 3000??

    Ach ich hab zum testen ob ich keinen Fehler gemacht hab irgend ne Zahl gebraucht.

    Da hab ich halt 2000 genommen.

    MfG



  • Ich glaube mich daran erinnern zu können das hier schon mal von Code-Hacker und noch jemandem eine Funktion gepostet wurde, die in etwa so ging:

    string int2base(unsigned int z,unsigned int b)
    {
        if(z)
        {
            string x("0123456789ABCDEF");
            return int2base(z/b,b) + x[z%b];
        }
        return "";
    }
    

Anmelden zum Antworten