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