Dualzahl in dezimalzahl



  • Danke für deine Antwort, aber ich weiß nicht wie man unsigned int einsetzt und wie es dann aussieht. Könntest du mir das bitte noch schreiben?



  • "unsigned" heisst einfach, dass da das vorzeichen nicht beachtet wird, dass also nur positive zahlen dargestellt werden können, und negative zahlen brauchst du wahrscheinlich nicht...



  • hmm also das mit den Enter könntest du so regeln:

    du stellst di frage: " Was möchten sie tun? (1)In der Nase bohren; (2) Nichts!"

    dann deklarierst du eine int variable( int vote = 0 ), anschliessend machst du eine do while schleife

    int vote = 0;
    bool is voting = false;
    
    do {
    
       voting = true;
    
       if( kbhit() ) { // wurde die tastatur benutzt
    
          vote = getch() // die vote var bekommt den tastencode der ausgelöst wurde
    
          switch( vote ) { // mit einer switch-case machst du eine 
                           // fallunterscheidung, dadurch ist es dir möglich nur 
                           // auf bestimmte tasten zu reagieren
    
             case '1': { //tu was; voting = false; break; }
             case '2': { //tu was; voting = false; break; }
             default: { cout << "Benutze die Ziffern 1 und 2 zum voten!";
                        voting = true; }   
          }
       }
    }
    

    soviel zu deinem enter problem.

    Gruß Tobi.



  • Danke, aber das wollte ich eigentlich nicht wissen, hab es trotzdem mit eingebaut im Programm.



  • Wolframm schrieb:

    Danke für deine Antwort, aber ich weiß nicht wie man unsigned int einsetzt und wie es dann aussieht. Könntest du mir das bitte noch schreiben?

    Na so:

    unsigned int Zahl;
    std::cin >> Zahl;
    //jetzt hast in Zahl vllt. so was: 1011
    //jetzt zerlegst die zahl in die einzelen stellen prüfst ob nur einsen und nullen vokommen und wertest es aus
    

    mfg tobZel



  • Genau das ist mein größtes Problem. Wie zerlege ich dann die Zahl, so das ich diese wieder in Arrays speichern kann?



  • Andrey schrieb:

    dann mach es nicht ziffer für ziffer, sondern als ein unsigned int, und zwar in beiden fällen...

    besser die binärzahl als string...

    #include <iostream>
    #include <string>
    using namespace std;
    
    unsigned long binary_to_number (string &binary)
    {
        unsigned long n = 0;
        for (size_t s=0; s<binary.length(); s++)
            n = (n<<1) + binary[s]-'0';
        return n;
    }
    
    int main() 
    {
        string in;
        cin >> in;
        cout << binary_to_number (in) << endl;
    }
    

    🙂



  • Danke, das funktioniert also schonmal, aber jetzt muss ich erstmal verstehen was du da geschrieben hast :D.

    Danke nochmals an alle für die Unterstützung.



  • Wolframm schrieb:

    Danke, das funktioniert also schonmal, aber jetzt muss ich erstmal verstehen was du da geschrieben hast :D.

    erst wird der vorherige wert 1 nach links geschoben (entspricht einer multiplikation mit 2, weil links die höchste stelle ist, muss auch so oft mit 2 multipliziert werden), dann wird das zeichen '0' oder '1' aus dem string dazu addiert. damit aus dem zeichen '0' oder '1' der zahlenwerte 0 oder 1 werden, muss man '0' abziehen. das ganze wird so oft gemacht, wie viele zeichen im string sind.
    der string darf übrigens nur aus nullen und einsen bestehen...
    🙂



  • Wie wär's damit:

    #include <iostream> 
    #include <bitset>
    
    int main () 
    { 
       std::bitset<32> myBitset;
       std::cout << "Bitte dualzahl eingeben(max. 32 Stellen): ";
       std::cin >> myBitset;
       std::cout << "Dezimalzahl ist: " << std::dec << myBitset.to_ulong() << std::endl;
    }
    

Anmelden zum Antworten