Bit-Verschiebung
-
Hallo,
Ich bin dabei C zu lernen und bin gerade bei Bit-Verschiebung angekommen. Die Übungsaufgabe lautet wie folgt:
int a = 2, b = 5; d = b << a;
Da ja die Dezimalzahl 5 in Binärcode 101 ist und 2 Stellen nach Links gerückt werden (die Zahlen am Rand herausfallen und am rechten Ende 2 Nullen aufgefüllt werden) müsste das Ergebnis in Binär 100 sein was die Zahl 4 in Dezimalzahl ist (also d = 4; ). Jedoch soll laut der Seite das Ergebnis d = 20; (was die Binärzahl 10100 sein soll) sein. Was hab ich falsch gemacht?
MfG
-
Ein int hat mindestens 16 Bit. Also ist die 5 nicht 101 sondern 0000000000000101
Klar kann man führende Nullen unterdrücken, man darf das aber nicht vergessen.
-
Ah, stimmt. Danke :).
Und wann hat int 16 Bit und wann 32 Bit?
-
bis 20:00 16 bit, danach 32. (kleiner scherz)
ernst-technisch gesehen, ist das vom standard nicht festgelegt und
maschinenabhängig.
wieviel von den dingern dein pc hat, googel mal nach sizeof operator.
-
thewolf16 schrieb:
Ah, stimmt. Danke :).
Und wann hat int 16 Bit und wann 32 Bit?
das ist nicht festgelegt, der c-standard hat hier keine festen vorgaben, aber 32-bit (4Byte) sind "Quasi-Standard", d.h. mit 99%iger wahrscheinlichkeit ist ein int auf deinem computer 32-bit.
das ist aber für dieses beispiel nicht wichtig, und die führenden nullen muss man auch nicht berücksichtigen.
#include <stdio.h> int main() { printf("int = %d Bytes = %d Bits\n",sizeof(int),sizeof(int)*8); return 0; }
so findest du die bitzahl eines integers auf deinem computer raus. auf den meisten computern (auch auf deinem wahrscheinlich) steht da:
int = 4 Bytes = 32 Bits
und ja, d müsste in deinem "code" 20 sein.
int d = 5 << 2; // bedeutet: b(101) << 2 ^ ^ b a Ergebnis: 10100 ^^ Diese Nullen wurde hinzugefügt.
http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm
b(10100) ist d(20).
alles korrekt.