Hallo zusammen,
Ich habe ein kleines Verständnisproblem, was Bitweiseoperatoren angeht. Den Artikel [Artikel] Bitoperationen in C# von egrath habe ich schon gelesen, aber komme trotzdem nicht ganz weiter.
Die Situation ist folgende:
Ich habe zwei Bytes:
Byte1 = 1011 0101
Byte2 = 0000 1100
Ich möchte nun die letzten vier Bits von Byte1 mit den letzten vier Bits von Byte2 "überschreiben". Sodass folgendes Ergebnis herauskommt.
1011 0101
0000 1100
---------
1011 1100 (das gesuchte Ergebnis)[
Welchen Operator kann ich dafür benutzen?
Ich habe bereits AND und OR ausprobiert:
//AND-Operator
1011 0101
& 0000 1100
-----------
= 0000 0100
(1011 1100 war aber gesucht)
//OR-Operator
1011 0101
| 0000 1100
-----------
= 1011 1101
(1011 1100 war aber gesucht)
Die einzige Lösung, die ich gefunden habe, ist jene, die ersten 4 Bits von Byte1 "0" zu setzen und dann den OR-Operator zu nehmen.
1011 0101
>> 4
------------
0000 1011
<< 4
------------
1011 0000
| 0000 1100
------------
= 1011 1100 (entspricht dem gesuchten Ergebnis)
//Alternativ kann man die letzten 4 Bits auch wie folgt "0" setzen:
1011 0101
& 1111 0000
-----------
= 1011 0000
Meine Frage ist nun, gibt es eine Möglichkeit, nur mit einer Operation und Byte1 und Byte2 zu dem gewünschten Ergebnis zu kommen? Oder muss man immer den Zwischenweg, mittels 0 setzen der ersten vier Bits, gehen? Ich frage mich halt, ob das nicht kürzer geht, als so, wie ich es jetzt gelöst habe...
Viele Grüße,
Raffael
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
Hallo blutiger_anfänger,
nein, das geht nicht ohne einen Zwischenschritt. Ich würde die Variante mit der Maske verwenden. Also bei jedem Wert die irrelevanten Bits weg"unden" und dann die beiden Zwischenergebnisse ver"odern".
herbivore
Vielen Dank für die schnelle Antwort. Mit der "Maske" meinst du die "Shift-lose" Lösung?
Viele Grüße,
Raffi
Wenn ich nicht hier bin, findest du mich auf code-bude.net.