Bit abfragen/setzen/löschen
worst_case
- java
Hi,
vielleicht schon mal gefragt, leider nichts gefunden, wie kann ich aus z.B. einem Integerwert ein einzelnes Bit abfragen/setzen/löschen
Danke
worst_case
hi!
vielleicht schon mal gefragt, leider nichts gefunden, wie kann ich
aus z.B. einem Integerwert ein einzelnes Bit abfragen/setzen/
löschen
Zuerst musst du wissen, welche Werte die einzelnen Bits haben. Das
niederwertigste Bit hat den Wert 1, das nächste den Wert 2, dann den
Wert 4, und so weiter. Das i-te Bit hat also den Wert 2^(i-1).
Dann gibt es bitweise logische Verknüpfungen, die du anwenden kannst.
Das sind & (AND), | (OR) und ^ (XOR). Du musst dir überlegen, wie du
mit diesen Operatoren die Werte abfragen und verändern kannst.
Mal ein paar Beispielrechnungen:
10101010 10101010
& 00001000 & 00000100
---------- ----------
00001000 00000000
Damit kannst du also ein Bit abfragen. Du ver-UND-est die Zahl, die
überprüft werden soll mit einer Zahl, in der nur das abzufragende
Bit gesetzt ist. Wenn 0 herauskommt, war das Bit nicht gesetzt, sonst
schon.
10101010 10101010
| 00001000 | 00000100
---------- ----------
10101010 10101110
Damit kannst du ein bestimmtes Bit setzen. Ist das entsprechende
Bit schon gesetzt, dann bleibt es auch erhalten.
10101010 10101010
^ 00001000 ^ 00000100
---------- ----------
10100010 10101110
So kannst du ein Bit umkippen: ist das Bit gesetzt, dann wird es
gelöscht, ansonsten wird es gesetzt. Das ist dann auch eine Methode,
um ein gesetztes Bit zu löschen, nämlich indem du vorher überprüfst,
ob es gesetzt ist, und dann mit einer XOR-Operation umkehrst.
bye, Frank!
Hallo Frank,
Das ist dann auch eine Methode, um ein gesetztes Bit zu
löschen, nämlich indem du vorher überprüfst, ob es gesetzt
ist, und dann mit einer XOR-Operation umkehrst.
Tatsaechlich wird das meist anders gemacht:
bitmask = bitmask & ~bit
Es wird also das unaere Komplement erstellt und dann per AND
verknuepft. Beispiel-Rechnung:
~ 00001000 ~ 00000100
---------- ----------
11110111 11111011
10101010 10101010
& 11110111 & 11111011
---------- ----------
10100010 10101110
Gruesse,
CK
hi!
Das ist dann auch eine Methode, um ein gesetztes Bit zu
löschen, nämlich indem du vorher überprüfst, ob es gesetzt
ist, und dann mit einer XOR-Operation umkehrst.
Tatsaechlich wird das meist anders gemacht:
bitmask = bitmask & ~bit
Das ist in der Tat besser, aber ich hatte keine Lust, darüber nach-
zudenken, wie man das alternativ machen kann... ;)
bye, Frank!