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?
-
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.