Bitset shift-operator



  • Hallo,

    ich hab eine frage zum shift-operator bei bitsets.
    ich hab folgenden code:

    #include <bitset>
    #include <iostream>
    
    using namespace std; 
    
    int main() 
    { 
    	bitset<8> bits;
    	bits[1].flip();
    	cout << bits << " => " << bits.to_ulong() << endl;
    	bits << 1;
    	cout << bits << " => " << bits.to_ulong() << endl;
    
    	// cout << (bits << 1) << " => " << (bits << 1).to_ulong() << endl;
    	return 0;
    }
    

    und will, dass bits mit zwei potenziert wird. das funktioniert aber nicht so, wie ich es möchte und zwar es passiert nichts bei der funktion bits << 1;
    wenn ich aber alles wie im auskommentierten mache, funktioniert es einwandfrei und es wird 4 ausgegeben.
    ich wollte fragen, ob mir jemand sagen kann, warum die 2 beim ersten mal nicht potenziert wird.

    mfg

    gucky



  • Das liegt daran, das deine Anweisung ins leere läuft. Sie wird zwar ausgeführt, aber das Ergebnis wird nirgendwo gespeichert.

    Richtig wäre:

    bits   =   bits << 1;
    


  • stimmt ich hab vergessen ein = zu schreiben
    bits <<= 1;

    danke 🙂



  • Gucky schrieb:

    ...
    und will, dass bits mit zwei potenziert wird. ...

    War natürlich nicht dein Problem, aber ein linksseitiges shiften um 1 entspricht einer Multiplikation mit 2 (keine Potenz).



  • ich meinte auch zweierpotenzen, hab es aber nicht geschrieben..


Anmelden zum Antworten