Verständisproblem bei int --> binärumwadlung
-
also ich mach grad ein c-buch durch und dabei wird im kapitel bit manipulation folgendes bsp angegeben:
. . . for(i=15;i>=0;--i) putchar(((zahl>>i)&1)+'0'); . . .
hierbei wird eine unsigned int zahl in eine binaäzahl umgewandelt also zumindest in dieser form ausgegeben z.B; 0000100100010001
nun zu meinem problem : durch zahl>>i wird die variable zahl durch 2^i geteilt so das ist eigentlich alles was ich hier verstanden habe also wenn mir jemand mal erklären könnte was da genau abläuft wäre ich ihm sehr verbunden.
ach ja es ist ja sonst nicht meine art so ungenaue fragen zu stellen aber ich versteh an dem beispiel echt gar nix.
-
> und << sind bitshitfting operatoren. deine erklaerung mit 2**i stimmt schon mal. man kann es aber auch anders erklaeren:
beispielzahl 42 ist 00101010
die bitshiftoperatoren verschieben die bits nach links oder rechts:
42 >> 1 waere 00010101.
42 << 2 waere 10101000.der & operator ist der bitweise and-operator. ein bit ist nur gesetzt, wenn in beiden operanden das bit gesetzt ist. also ist z.b. 42&1 == 0 und 23 & 29 == 10111b & 11101b == 10101b.
der for loop geht von 15 bis 0 alle bits durch und gibt sie als zeichen aus ('0' + 1 ist '1', '0' + 0 ist '0').
-
blut-lecker schrieb:
for(i=15;i>=0;--i) putchar(((zahl>>i)&1)+'0');
mann die loesung ist echt genial!!!!
-
blut-lecker schrieb:
for(i=15;i>=0;--i) putchar(((zahl>>i)&1)+'0');
mann die loesung ist echt genial!!!!
-
Hey vielen vielen dank für die erklärung jetzt hab ichs verstanden!!!
@linuxuser jaja die lösung mag schon genial sein, wenn man sie versteht, wie hättest du das denn gelöst?
-
int zahl = 42; int i = sizeof(zahl)*8; while (i--) putchar('0' + ((zahl >> i) & 1));