Bitmaske in C# verwenden

Saad Aslam 12 Oktober 2023
Bitmaske in C# verwenden

In diesem Beitrag wird untersucht, wie Bitmasken in C# verwendet werden können. Das Wichtigste ist, dass Sie die allgemeine Idee hinter dem verstehen, was Sie tun, auch wenn es viele verschiedene Methoden gibt, um diese Aufgabe zu erledigen.

Sie müssen sich bewusst sein, dass Sie mit den Bits im Speicher arbeiten, um die Bitmaske zu verwenden.

Bitmaske in C# verwenden

C# verfügt über eine Vielzahl von Operatoren, von denen die meisten als bitweise Operatoren bezeichnet werden. Diese Operatoren führen Operationen auf Bitebene im Speicher aus.

Die bitweisen Operatoren mit ihren Symbolen lauten wie folgt.

  1. Der mit dem &-Zeichen gekennzeichnete Operator ist der AND-Operator.
  2. Der durch das | gekennzeichnete Operator Vorzeichen ist der Operator ODER.
  3. Der mit dem ~-Zeichen gekennzeichnete Operator ist der NOT-Operator.
  4. Der durch das ^-Zeichen gekennzeichnete Operator ist der XOR-Operator.
  5. Der durch das Zeichen << gekennzeichnete Operator ist der Operator Linksverschiebung.
  6. Der durch das Zeichen >> gekennzeichnete Operator ist der Operator Rechtsverschiebung UND.

Die Funktionsweise des UND-Operators ist wie folgt.

X  Y  Res
0  0  0
0  1  0
1  0  0
1  1  1

Res ist die Ausgabe und X und Y sind die Eingabemöglichkeiten.

Die Funktionsweise des ODER-Operators ist wie folgt.

X  Y  Res
0  0  0
0  1  1
1  0  1
1  1  1

Res ist die Ausgabe und X und Y sind die Eingabemöglichkeiten.

Die Funktionsweise des NOT-Operators ist wie folgt.

X  Y
1  0
0  1

Y ist die Ausgabe und X sind die Eingabemöglichkeiten.

Die Funktionsweise des XOR-Operators ist wie folgt.

X  Y  Res
0  0  0
0  1  1
1  0  1
1  1  0

Res ist die Ausgabe und X und Y sind die Eingabemöglichkeiten.

Die Arbeitsweise des Linksverschiebungs-Operators ist wie folgt.

x = 010110011

Wenn wir es zweimal nach links verschieben, bewegen sich die Bits um 2-Bit-Abstände nach links.

x << 2

Jetzt wird das x sein:

x = 011001100

Und auf der rechten Seite werden zwei neue 0-Bits hinzugefügt.

Die Arbeitsweise des Operators für die rechte Schicht ist wie folgt.

x = 010110011

Wenn wir es zweimal nach rechts verschieben, bewegen sich die Bits um 2-Bit-Abstände nach links.

x >> 2

Jetzt wird das x sein:

x = 000101100

Und auf der linken Seite werden zwei neue 0-Bits hinzugefügt. Da wir nun die Funktionsweise des bitweisen Operators kennen, können wir Bitmasken auf unsere Eingaben anwenden.

Der am häufigsten für Bitmasken verwendete Operator ist der AND-Operator; Es wird verwendet, um zu sehen, welche Bits eins und welche null sind, da sein Ausgang eins ist, wenn beide Eingänge 1 sind.

Es folgt der Code, der die letzten 4 maskierten Bits auswertet.

using System;

namespace HelloWorld {
  class Program {
    static void Main(string[] args) {
      char x = '2';
      int y = 0b00001111;
      int z = x & y;
      Console.WriteLine(z);
    }
  }
}

Damit es 1 Byte Platz im Speicher hat, haben wir die Variable vom Typ char x und die Variable vom Typ int y konstruiert.

Die binäre Version des entsprechenden Dezimalwerts, bei dem die letzten vier Bits 1 sind, wird als 0b00001111 geschrieben.

Die Zeile mit int z= x&y; berechnet das bitweise und der Bits und speichert das Ergebnis in der Variablen namens z. Da die Variable z vom Datentyp int ist, können wir das Ergebnis in Dezimalform sehen.

Die Operation ist wie folgt.

x = 01111101

    y = 00001111

    z = x& y = 00001101

Da dies sichtbar ist, wissen wir, dass die Variable x bis auf die letzten vier Bits vollständig entfernt wurde. Dazu haben wir den AND-Operator verwendet.

Ebenso können wir die Bits mit dem ODER-Operator kombinieren.

Sie sollten jetzt sehen können, dass es jetzt einfach ist, mit ihnen zu spielen und Ihre Chiffren zu generieren, wenn Sie ein solides Wissen über die Bits haben.

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn