Frage zu Bitverschiebung



  • Hallo,

    ich lerne momentan mit dem Buch "Der C++ Programmierer" von Ulrich Breymann.

    Es wurde eine Übungsaufgabe gestellt, bei der man mithilfe einer Schleife eine eingegebene Zahl binär ausgeben soll.

    Hier ist die vorgegebene Musterlösung:

    #include<iostream>
    using namespace std;
    int main() {
    cout << "Eingabe einer Zahl: ";
    int zahl = 0;
    cin >> zahl;
    int anzahlDerBytes = sizeof zahl;
    int anzahlDerBits = 8  anzahlDerBytes;
    cout <<" binär : ";
    for(int k = anzahlDerBits–1; k >= 0 ; ––k) {
    if(zahl & (1 << k)) {
    cout << "1";
    }
    else {
    cout << "0";
    }
    }
    cout << endl;
    }

    Ich verstehe hierbei die if-Bedingung nicht.

    Warum wird die Zahl 1 um k-Stellen verschoben und nicht die Variable zahl?

    Desweiteren verstehe ich auch den Rest der if-Bedingung nicht.
    Was genau bedeutet (zahl & (1 << k)?

    Ich hoffe ihr könnt mir weiterhelfen.
    Viele Grüße
    LieutenantTanaka



  • Beachte, daß & für das bitweise UND steht, es ist nicht das logische UND, was && geschrieben wird.

    LieutenantTanaka schrieb:

    Warum wird die Zahl 1 um k-Stellen verschoben und nicht die Variable zahl?

    Geschmachssache.

    if ((zahl & (1 << k)) == (1 << k))
    

    und

    if (((zahl >> k) & 1) == 1)
    

    testen das gleiche, nämlich ob das Bit an Stelle k (von rechts aus gezählt) gesetzt ist.

    LieutenantTanaka schrieb:

    Desweiteren verstehe ich auch den Rest der if-Bedingung nicht.
    Was genau bedeutet (zahl & (1 << k)?

    Naja, es ist da egal, ob man schreibt

    if ((zahl & (1 << k)) == (1 << k))
    

    oder

    if ((zahl & (1 << k)) != 0)
    

    udn ein !=0 braucht man im if nicht, also geht auch

    if ((zahl & (1 << k))   )
    

    also

    if (zahl & (1 << k))
    


  • LieutenantTanaka schrieb:

    Hallo,

    Was genau bedeutet (zahl & (1 << k)?

    Wenn bit k in zahl gesetzt ist dann ..., andernfalls ....



  • Wie kommt der Herr Breymann darauf, dass ein Byte immer 8 Bits hat?


  • Mod

    HargeFrage schrieb:

    Wie kommt der Herr Breymann darauf, dass ein Byte immer 8 Bits hat?

    Vermutlich weiß er das schon, aber er ist kein c-plusplus.net-Forenklugscheißer, der in jeder auch noch so nebensächlichen Aussage nach irgendwelchen Ungenauigkeiten sucht, deren Erwähnung völlig an der Sache vorbeigehen würde.


Anmelden zum Antworten