PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitmanipulation


liquid
2003-08-24, 23:43:37
Hiho Leute,

sagen wir mal ich hab nen unsigned long integer namens bitfield. Dann hab ich ja 32 Bits die ich entweder an oder aus gesetzt haben kann. Sagen wir auch ich habe bitfield mit 0x00000000 initialisiert.

Dann habe ich ein Enumerator
enum BITFIELD_ENUM
{
STATE_01 = 1,
STATE_02 = 2,
STATE_03 = 4,
STATE_04 = 8,
STATE_05 = 16,
STATE_06 = 32,
... und halt so weiter
};

So, jetzt guckt mal bitte ob ich bei meiner Überlegung richtig liege.
Ich setze ein Bit mit
bitfield |= STATE_X (OR mit Zuweisung)

Ich "flippe" ein Bit mit
bitfield ^= STATE_X (XOR mit Zuweisung)

Nur wie lösche ich ein Bit wieder, also setze die Position auf Null? Mit
bitfield &= STATE_X (AND mit Zuweisung)
geht es offensichtlich nicht, oder doch?

Ahja, noch so ein paar Sachen. Mit AND kann ich den Zustand eines Bits prüfen, richtig?

Also nach dem Motto
if (bitfield & STATE_X)
BLA_BLA();

Schonmal Danke für die Hilfe!!

cya
liquid

Xmas
2003-08-25, 00:09:34
Löschen kannst du ein Bit mit
bitfield &= ~STATE_X

~ ist der bitwise not Operator

Und ja, mit & prüfst du den Zustand des Bits, Resultat ist dann 0 oder der entsprechende Bitwert.

liquid
2003-08-25, 00:18:19
Hehe, Xmas der Retter in jeder Not. Wieder einmal ein dickes Thanks an den Codingguru-Dopefish :D

cya
liquid