Laden...

[gelöst] Bitweise Operationen - einzelne Bits in einem Byte "überschreiben"

Erstellt von blutiger_anfänger vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.564 Views
B
blutiger_anfänger Themenstarter:in
293 Beiträge seit 2008
vor 12 Jahren
[gelöst] Bitweise Operationen - einzelne Bits in einem Byte "überschreiben"

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.

49.485 Beiträge seit 2005
vor 12 Jahren

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

B
blutiger_anfänger Themenstarter:in
293 Beiträge seit 2008
vor 12 Jahren

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.