Übung aus C++ Primer (bitset)



  • Hier nochmal die Abschlussübung zu "bitset":

    Betrachten Sie die Zahlenfolge 1,2,3,5,8,13,21. Initialisieren Sie ein bitset<32> Objekt, das ein Bit in jeder Position aufweist, die einer Zahl dieser Folge entspricht. Schreiben Sie alternativ ein kurzes Programm für ein leeres Bitset, das jedes der genannten Bits einschaltet.

    Teil 1 der Aufgabenstellung verstehe ich einfach nicht, bei mir kann n bitset<32> bitvec = 1 // = 2; = 3; = 5...... sein, aber nicht irgendwie alles gleichzeitig. "In jeder Position...." ka...wie des gemeint ist.

    Teil 2, da wäre hier mein Lösungsvorschlag:

    #include <iostream>
    #include <string>
    #include <bitset>
    
    using std::cout;
    using std::endl;
    using std::bitset;
    
    int main()
    {
        bitset<32> bitvec;
        size_t last_on_bit = 21;
        size_t remember = 0;
        for(size_t i=1; i<=last_on_bit; i = i + remember ) // i=1  r=1; i=2 r=1+2=3; i=5 r=3+5=8;.......
        {
            bitvec.set(i);
            remember += i;
            bitvec.set(remember);
        }
    
        cout << bitvec << endl << endl;
    
        return 0;
    }
    

    1. Bitte bewerten/kritisieren 🙂
    2. Ist dass mit dem "size_t" korrekt, weil in meinem Buch hab ich gelernt, dass ein "BitsetOjekt.size()" size_t zurück gibt, also Spreche ich auch die einzelnen Positionen bei "set(...)" mit size_t an? Oder hab ich da was falsch verstanden? Wie hättet ihr dass gemacht? (mit diesen ganzen Typen komm ich irgendwann mal noch total durcheinander...:))

    MfG
    Stromberg


  • Administrator

    Bit  1: 00000000 00000000 00000000 00000001
    Bit  2: 00000000 00000000 00000000 00000010
    Bit  3: 00000000 00000000 00000000 00000100
    Bit  5: 00000000 00000000 00000000 00010000
    Bit  8: 00000000 00000000 00000000 10000000
    Bit 13: 00000000 00000000 00010000 00000000
    Bit 21: 00000000 00010000 00000000 00000000
    
    Result: 00000000 00010000 00010000 10010111 -> 1052823
    
    std::bitset<32> bitvec(1052823ul);
    

    Und als Funktion würde ich das daher irgendwie so schreiben:

    void do_that_thing(std::bitset<32>& bitset)
    {
      static std::bitset<32> const value(1052823ul);
    
      bitset.reset();
      bitset |= value;
    }
    

    Sofern ich das richtig verstanden habe 😉

    Und wegen dem size_t und co, dafür gibt es Referenzen:
    http://www.cplusplus.com/reference/stl/bitset/
    bzw.
    http://www.cplusplus.com/reference/stl/bitset/size.html
    http://www.cplusplus.com/reference/stl/bitset/set.html

    Mit der Zeit kennt man aber das wichtigste auswendig 😉

    Grüssli


Anmelden zum Antworten