Zahl binär ausgeben
-
Moin, in meinem C++ - Buch gibt es ( um sich mit den Bit-Operatoren vertrauter zu machen ) eine Aufgabe, welche verlangt, dass ich eine Zahl binär auf der Konsole ausgeben soll. Hierzu muss ich leider sagen, dass ich das Binärsystem allgemein zwar etwas verstehe, es aber in C++ für mich ganz anders ist, weil es immer ein Vorzeichenbit gibt.
Wie auch immer, jedenfalls verstehe ich die Lösung nicht so ganz :cout << "Eingabe einer Zahl: "; int zahl = 0; cin >> zahl; int AnzahlBits = { sizeof(zahl) * 8 }; for (int i = AnzahlBits-1; i>=0; i--) { if (zahl & (1 << i)) std::cout << "1"; else std::cout << "0"; } std::cout << std::endl;
Um es mal präzise zu machen, diese Zeile verstehe ich nicht :
if (zahl & (1 << i))
Wäre toll wenn sich jemand eben die Zeit nimmt um mir das kurz zu verklickern!
-
Nur Fließkommazahlen haben ein Vorzeichenbit. Ganzzahlen sind praktisch immer im Zweierkomplement und außerdem gibt es unsigned.
1 << i verschiebt eine 1 um i Bits nach links. Also erst um AnzahlBits-1 Bits, damit hast du das erste Bit von links. Dann um AnzahlBits-2 Bit für das zweite Bit von links usw.
zahl & (1 << i) ergibt dementsprechend 1 wenn das Bit an der i-ten Stelle gesetzt ist und sonst 0. Und das if wird für 1 ausgeführt und gibt "1" aus und für 0 gibt der else-Zweig "0" aus.
Ist mir etwas unklar wieso dort nicht direkt std::cout << (zahl & (1 << i)) steht.
-
nwp3 schrieb:
Ist mir etwas unklar wieso dort nicht direkt std::cout << (zahl & (1 << i)) steht.
zahl & (1 << 10) ergibt 0 oder 1^10, nicht 0 oder 1... Bin müde.
-
Vielen Dank für die schnelle Antwort,
bei mir hat es klick gemacht, als du erwähnt hast, dass eine 1 um x Bits nach links verschoben wird. Mein Problem war auch, ich habe die 1 nicht als einzelne Zahl angesehen sondern hab mir immer gedacht in "zahl" wird etwas hinein geschoben. Also wenn ich das Richtig verstanden habe kann man das etwa so auffassen ( zahl ist 5 ) :
5 ( binär ) : 0000 0000 0000 0000 0000 0000 0000 0101
1 ( verschoben ) : 1000 0000 0000 0000 0000 0000 0000 0000Dann prüft er ob das bei der 5 eine 1 gesetzt ist und gibt dementsprechend eine 0 oder 1 aus. Das ganze geht so lange weiter bis die 1 eben ganz vorne angekommen ist.
Hab ich das richtig verstanden?
-
Yup.
-
Dankeschön, endlich kann man mal mit gutem Gewissen weiter lernen
-
nwp3 schrieb:
zahl & (1 << 10) ergibt 0 oder 1^10, nicht 0 oder 1... Bin müde.
Ja scheint so
Was ist 1*1*1*1*1*1*1*1*1*1?
Richtig ist:
zahl & (1 << 10) ergibt 0 oder 2^10.