Hi,
ich komm einfach nicht drauf.
Bsp:
Bitfeld1: 0001 0101
Bitfeld2: 0100 0000
Ziel: Bit6 aus Bitfeld1 mit Bit6 aus Bitfeld2 setzen = 01010101.
Bit6 aus Bitfeld1 soll in jedem Fall ersetzt werden, d.h. auch wenn z.B.
Bitfeld1=0101 0101 und
Bitfeld2=0000 0000
= 0001 0101
Mit welcher Bitoperation gelingt das für beide Beispiele? Mit AND, OR, XOR komme ich nicht auf die Lösung. Und wie sieht dann der Code in C# dazu aus?
Hoffe Ihr könnt mir helfen...
Danke!
Bitfelder:
kombinieren:OR (|) Z.B 0001 0101|0100 0000 =01010101
überschneidungen finden, bits herausfiltern: And (&)
unterschiede finden: Xor (^)
undrehen: Not (!)
einzelnes Bit setzen: (1<<nummer)
Hallo zipperle,
du brauchst eine Maske, bei der nur das sechste Bit gesetzt ist.
Mit dieser Maske löscht du das entsprechende Bit im ersten Wert (& ~)
Mit dieser Maske löscht du alle anderen Bits aus dem zweiten Wert (&)
Dann verorderst du beide Zwischenergebnisse (|)
herbivore
Danke für die schnellen Antworten.
So ganz sicher bin ich mir aber noch nicht. Ich versuch das von mir erst genannte Beispiel mit Herbivore´s Beschreibung:
Maske: 0100 0000
Bit 6 laus Bitfeld1 öschen:
1011 1111
& 0001 0101
-----------
= 0001 0101
1011 1111
& 0100 0000
-----------
= 0000 0000
0001 0101
| 0000 0000
-----------
= 0001 0101
War das so korrekt?
Hallo zipperle,
von den Operationen her stimmt es. Die Werte, die du eingetragen hast, hauen nicht hin.
Die Maske muss in im ersten Schritt invertiert sein, im zweiten nicht.
Mit
1. Bitfeld: 0001 0101
2. Bitfeld: 0100 0010
Maske: 0100 0000
Wären folgende Schritte nötig:
0001 0101 (1. Bitfeld)
& 1011 1111 (invertierte Maske)
-----------
= 0001 0101
0100 0010 (2. Bitfeld)
& 0100 0000 (Maske)
-----------
= 0100 0000
0001 0101 (1. Zwischenergebnis)
| 0100 0000 (2. Zwischenergebnis)
-----------
= 0101 0101
herbivore