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 = 0Nemen 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 -------- 10000000und, 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 -------- 00000000Dann 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 => falsegrüße