Bitweises Abfragen



  • Ich habe eine 1 Byte grosse Variable und möchte wissen ob das 8-te bit gesetzt ist.

    (Byte & 0x80) so ungefähr

    warum die null nach der 8?
    wäre das nicht eigentlich das 24ste bit?
    hänge ich immer noch eine 0 daran?

    danke muli



  • 0x80 ist eine Hexadezimalzahl.

    0x80 = 128 (dezimal) = 10000000 (binär)
    

    Wenn du jetzt das siebte Bit abfragen willst, dann nimmst du

    0x40 = 64 (dezimal) = 01000000 (binär)
    


  • Hi!

    @muli:
    Du hast die Bit Operationen noch nicht verstanden oder? 🙂
    Ich geb dir mal einen kurzen Überblick:

    Man arbeitet hier ausschließlich mit Binärzahlen, daher musst du die 0x80 (hexadezimalsystem) als Binärzahl sehen, also 10000000. Wenn du diese Zahl mit deinem Byte verknüpfst (mit einem Bitweisen und) dann passiert folgendes:

    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0
    

    Nemen wir an dein Byte hat die Zahl 141, diese entspricht im Binärsystem der 10001101. Jetzt werden beide Binären Zahlen verknüpft:

    10000000
    10001101
    --------
    10000000
    

    und, tataaaa... Du bekommst eine Zahl raus, und zwar genau die 0x80. Wir sehen also, das 8. Bit ist gesetzt. Wenn nun allerdings das 8. Bit nicht gesetzt ist, was passiert dann?

    10000000
    01001101
    --------
    00000000
    

    Dann sind & Verknüpfungen der Bits unwahr und du bekommst die Zahl 0 zurück. Daher kannst du in deiner If-Abfrage schreiben:

    if ( byte & 0x80 ) // wenn Bit 8 nicht gesetzt ist das Ergebniss 0 => false
    

    grüße


Anmelden zum Antworten