Im Artikel "Bitmanipulation" steht recht weit unter: // prüfe ob Bit 4 in der Variable tmp gelöscht ist // die Klammer ist wichtig if (!(tmp & 0x10)) { // hier die Anweisungen, wenn das Bit gelöscht ist } XXXX0XXX & 00001000 ---------- 00000000 inv. --> 11111111 --> TRUE is OK seh ich ein. XXXX1XXX & 00001000 ---------- 00001000 inv. --> 11110111 --> TRUE aber sollte da nicht 00000000 stehen? Gruß Alex PS: Für Erklärung, und/oder andere Lösung wäre ich sehr dankbar.
'!' ist eine logische Invertierung. aus TRUE wird FALSE und andersherum. Eine bitweise Invertierung (wie du sie angewendet hast) ist die Tilde '~'. Und weil die Bitweise Invertierung eben falsch ist, steht dort auch '!' und nicht '~'.
Abgesehen davon, dass es sich bei der Maske 0x10 nicht um das 4. sondern um das 5. Bit handelt, ist das ! nicht eine Invertierung, sondern eine Negierung. 00000000 inv. --> 11111111 erreicht man mit dem ~ Operator.
>Maske 0x10 nicht um das 4. sondern um das 5. Bit
Doch. Das ist das 4.Bit:
In der Informatik beginnt man bei Null zu zählen.
2 hoch 4 = 16dez = 10hex.
ja richtig, aber er hat es falsch gezeichnet: das 4. Bit ist XXXOXXXX und nicht XXXXOXXX
Matthias Lipinsky wrote: >>Maske 0x10 nicht um das 4. sondern um das 5. Bit > > Doch. Das ist das 4.Bit: > In der Informatik beginnt man bei Null zu zählen. Aber doch nicht bei Ordnungszahlen... Es ist das Bit Nummer 4 (oder das Bit mit der Wertigkeit 4), und im Register ist das (von hinten gezählt) das fünfte Bit. Das Bit Nummer 0 ist das erste Bit.
>Das Bit Nummer 0 ist das erste Bit
Für mich das Nullte.
;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.