Frage Bitoperationen !
-
Hallo an allen,ich habe hier einen kleinen Code und ich moechte ein paar Sachen erklaert haben!
void outputBinRep(int num) 1 { 2 unsigned bitmask=0x1 << ((sizeof(int)*8)-1); 3 4 while(bitmask) 5 { 6 printf("%c",(num&bitmask) ? '1' :'0'); 7 bitmask >>=1; 8 } 9 }
Ich wollte eigentlich fragen ob meine Ueberlegungen richtig sind:
Zeile 2: Hier wird bitmask als binaer Zahl gesetzt und zwar
100000000000000000000000000000000 (32 Bit Stellen)Zeile 4: Hier wird die Schleife durchgefuehrt, solange esd gilt "bitmask > 0 oder ungleich 0" ? ?(ODER ?)
Zeile 6: Hier habe ich ein paar Fragen:Ich verstehe dass hier bitmask mit einer beliebigen,von der Tastatur eingegebenen Zahl konjuktiv verknuepft wird.D.h bitmask= 10000000000000000000000000000000 (32 Stellen)
z.b num=2 10 &
------------------------------------
ergibt 10000000000000000000000000000000 groesser Null.
Aber die Anweisung printf("%c",(num&bitmask) ? '1' :'0'); sagt uns ,dass wenn num&bitmask > 0 setze 1,sonst 0 oder ? Wenn es so ist dann sollte rauskommen als erstes Ziffer eine " 1 " und nicht eine "0" oder?(Das Ergebnis ist 0 aber ich verstehe nicht ganz wie er funktioniert)Zeile 7: Hier wird die "1" um eineStelle nach Links geschoben und weiter gemacht!D.h 0100000000000000000000000000000
Koennte mir jemand das kurz erklaeren ob ich recht habe oder nicht ?
Danke
kilomat
-
Ich habe es gefunden ,es war ein Denkfehler (Falsche Berechnung) und zwar bei
100000000000000000000000000000
000000000000000000000000000010
------------------------------
000000000000000000000000000000und nicht
100000000000000000000000000000
dann macht es Sinn!!