Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

[gelöst] Bitweise Operationen - einzelne Bits in einem Byte "überschreiben"
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

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

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von blutiger_anfänger am .
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers