Bit, Byte und Bitverschiebung



  • Hallo liebe Community!

    Ich arbeite gerade an dem Buch "Der C++ Programmierer"!
    Bei dem Übungsbeispiel 1.5 steh ich etwas auf der Leitung. Ich hab mir bereits Gedanken dazu gemacht, bin aber zu keiner vernünftigen Lösung kommen!

    #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 << '\n';
    }
    

    Meine Fragen:
    Warum muss ich in der for Schleife die Variabel "anzahlDerBits" um 1 subtrahieren?
    Warum verschiebe ich in der if Anweisung das k bitweise um 1 nach links?

    Vielen Dank schon mal im vorhinein

    lg Brail



  • 1. Weil die Bits einer (zum Beispiel) 32 - Bit Zahl durchnumeriert werden von 0 bis 31
    2. Das tust Du nicht. Du verschiebst in den Klammern 1 Bit um k Stellen nach links.



  • Brail01 schrieb:

    Warum verschiebe ich in der if Anweisung das k bitweise um 1 nach links?

    Du verschiebst die 1 um k Positionen. Mit k=3 gibt das 00001000.

    Brail01 schrieb:

    Warum muss ich in der for Schleife die Variabel "anzahlDerBits" um 1 subtrahieren?

    0-mal schieben = erste Position
    ...
    n-1-mal schieben = n-te Position



  • Vielen Dank für die super schnellen und vorallem hilfreiche Antworten!
    Hab das jetzt tatsächlich verstanden! 😃

    lg Brail


Anmelden zum Antworten