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
    ------------------------------
    000000000000000000000000000000

    und nicht

    100000000000000000000000000000

    dann macht es Sinn!!


Anmelden zum Antworten