Forum: Compiler & IDEs Bitmanipulation? Ist das richtig so?


von Alex (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

'!' 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 '~'.

von erklärbär (Gast)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

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

von erklärbär (Gast)


Lesenswert?

ja richtig, aber er hat es falsch gezeichnet:

das 4. Bit ist XXXOXXXX und nicht XXXXOXXX

von Matthias L. (Gast)


Lesenswert?

das ist natürlich auch korrekt

von Johannes M. (johnny-m)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.