C# Bit-Array (BitArray)
BitArray ist eine Sammlung in C#, die verwendet wird, um eine Menge von Bitwerten darzustellen.
BitArray gehört zum Namespace System.Collections und wird hauptsächlich für die Verarbeitung binärer Daten oder die Durchführung von Bitoperationen verwendet.
Im Vergleich zur Verwendung eines Boolean-Arrays (bool[]) ist BitArray effizienter, da es jedes Bit kompakt speichert.
Die BitArray-Klasse verwaltet ein kompaktes Array von Bitwerten, die durch boolesche Werte dargestellt werden.
true bedeutet, das Bit ist eingeschaltet (1), false bedeutet, das Bit ist ausgeschaltet (0)。
Wenn Sie Bits speichern müssen, aber die Anzahl der Bits im Voraus nicht kennen, verwenden Sie ein BitArray.
Sie könnenInteger Indexverwenden, um auf Elemente der BitArray-Auflistung zuzugreifen, wobei der Index bei null beginnt.
Methoden und Eigenschaften der BitArray-Klasse
Die folgende Tabelle listetBitArrayeinige häufig verwendete Elemente der KlasseEigenschaft:
| Attributname | Type | Beschreibung |
|---|---|---|
Count | int | AbrufenBitArrayDie Anzahl der enthaltenen Bits (schreibgeschützt). |
Length | int | Abrufen oder festlegenBitArrayDie Anzahl der Bits in (unterstützt dynamische Größenänderung). |
IsReadOnly | bool | Ruft einen Wert ab, der angibt, ob dieBitArrayschreibgeschützt ist (immerfalse)。 |
SyncRoot | object | Ruft ein Objekt ab, das zum Synchronisieren des Zugriffs auf dieBitArrayZugriff. |
IsSynchronized | bool | Ruft einen Wert ab, der angibt, ob der Zugriff auf dieBitArraysynchronisiert (threadsicher) ist. |
Item[int index] | bool | Ruft den Wert des Bits am angegebenen Index ab oder legt ihn fest (Zugriff über den Indexer). |
Eigenschaftszugriff:
BitArray bits = new BitArray(8); // 创建 8 位的 BitArray,所有位默认为 false Console.WriteLine(bits.Length); // 输出:8 bits.Length = 10; // 修改长度为 10,新增的位默认为 false
Die folgende Tabelle listetBitArrayeinige häufig verwendeteMethoden der Klasse:
| Methodenname | Rückgabetyp | Beschreibung |
|---|---|---|
And(BitArray) | BitArray | Bitweise AND-Operation, bei zweiBitArrayführt eine AND-Operation für die entsprechenden Bits aus, ändert die aktuelle Instanz direkt und gibt die aktuelle Instanz selbst zurück. |
Or(BitArray) | BitArray | Bitweise OR-Operation, bei zweiBitArrayführt eine OR-Operation für die entsprechenden Bits aus, ändert die aktuelle Instanz direkt und gibt die aktuelle Instanz selbst zurück. |
Xor(BitArray) | BitArray | Bitweise XOR-Operation, bei zweiBitArrayführt eine XOR-Operation für die entsprechenden Bits aus, ändert die aktuelle Instanz direkt und gibt die aktuelle Instanz selbst zurück. |
Not() | BitArray | Bitweise NOT-Operation, die jedes Bit der aktuellen Instanz invertiert, sie direkt ändert und die aktuelle Instanz selbst zurückgibt. |
Set(int index, bool value) | void | Setzt das Bit am angegebenen Index auf den angegebenen Wert (trueoderfalse)。 |
SetAll(bool value) | void | Setzt alle Bits auf den angegebenen Wert (trueoderfalse)。 |
Get(int index) | bool | Ruft den Wert des Bits am angegebenen Index ab. |
Clone() | object | Aktuelles erstellenBitArrayEine flache Kopie (Duplikat) von. |
CopyTo(Array array, int index) | void | wirdBitArrayKopiert den Inhalt in das angegebene Array, beginnend am angegebenen Index. |
Equals(object obj) | bool | Bestimmt, ob das angegebene Objekt gleich dem aktuellen istBitArray。 |
GetEnumerator() | IEnumerator | Gibt einen Enumerator zurück, der durchläuftBitArraydas Bit in. |
Verwendung der Methode:
BitArray bits = new BitArray(8, false); // 创建 8 位的 BitArray,初始值全部为 false bits.Set(0, true); // 设置第 0 位为 true Console.WriteLine(bits.Get(0)); // 输出:True bits.SetAll(true); // 将所有位设置为 true
Beispiel
Das folgende Beispiel veranschaulicht die Verwendung von BitArray:
In BitArrayIndex 0 entspricht dem niedrigstwertigen Bit einer BinärzahlDie Bitfolge, die durch Durchlaufen in Vorwärtsindexreihenfolge erhalten wird, ist der normalen Schreibreihenfolge entgegengesetzt; daher verwendet das folgende Beispiel für die Ausgabe die Rückwärtsdurchquerung.
Methoden wie And(), Or(), Xor() führenIn-Place-Modifikationdurch. Sie rufen die Instanz auf und geben sich selbst zurück, daher wird vor jeder Operation ein Kopierkonstruktor verwendet.
new BitArray(ba1)Eine Kopie erstellen.
Beispiel
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
// Zwei BitArrays initialisieren, um Binärbits zu speichern
BitArray ba1 = new BitArray(new byte[] { 60 }); // 60 = 00111100
BitArray ba2 = new BitArray(new byte[] { 13 }); // 13 = 00001101
// Inhalte von ba1 und ba2 ausgeben
Console.WriteLine("Bit-Array ba1 (60):");
PrintBitArray(ba1);
Console.WriteLine("Bit-Array ba2 (13):");
PrintBitArray(ba2);
// AND-Operation ausführen und das Ergebnis ausgeben
// And/Or/Xor ändern die aufrufenden Instanzen direkt; erstellen Sie vor der Operation eine Kopie von ba1.
BitArray baAnd = new BitArray(ba1);
baAnd.And(ba2); // 60 & 13 = 12
Console.WriteLine("Bit-Array nach AND-Operation (12):");
PrintBitArray(baAnd);
// OR-Operation ausführen und Ergebnis ausgeben
BitArray baOr = new BitArray(ba1); // Das ursprüngliche ba1 erneut kopieren.
baOr.Or(ba2); // 60 | 13 = 61
Console.WriteLine("Bit-Array nach OR-Operation (61):");
PrintBitArray(baOr);
// XOR-Operation ausführen und Ergebnis ausgeben
BitArray baXor = new BitArray(ba1); // Das ursprüngliche ba1 weiter kopieren.
baXor.Xor(ba2); // 60 ^ 13 = 49
Console.WriteLine("Bit-Array nach XOR-Operation (49):");
PrintBitArray(baXor);
Console.ReadKey();
}
// Rückwärtsdurchlauf, damit die Ausgabe der Konvention "höchstwertige Ziffer zuerst" entspricht
static void PrintBitArray(BitArray bitArray)
{
for (int i = bitArray.Length - 1; i >= 0; i--)
{
Console.Write($"{(bitArray[i] ? 1 : 0)} ");
}
Console.WriteLine("\n");
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Bit array ba1 (60): 0 0 1 1 1 1 0 0 Bit array ba2 (13): 0 0 0 0 1 1 0 1 Bit array after AND operation (12): 0 0 0 0 1 1 0 0 Bit array after OR operation (61): 0 0 1 1 1 1 0 1 Bit array after XOR operation (49): 0 0 1 1 0 0 0 1
Weitere Erweiterungen