C# Bit-Array (BitArray)

C#-Sammlungen

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:

AttributnameTypeBeschreibung
CountintAbrufenBitArrayDie Anzahl der enthaltenen Bits (schreibgeschützt).
LengthintAbrufen oder festlegenBitArrayDie Anzahl der Bits in (unterstützt dynamische Größenänderung).
IsReadOnlyboolRuft einen Wert ab, der angibt, ob dieBitArrayschreibgeschützt ist (immerfalse)。
SyncRootobjectRuft ein Objekt ab, das zum Synchronisieren des Zugriffs auf dieBitArrayZugriff.
IsSynchronizedboolRuft einen Wert ab, der angibt, ob der Zugriff auf dieBitArraysynchronisiert (threadsicher) ist.
Item[int index]boolRuft 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:

MethodennameRückgabetypBeschreibung
And(BitArray)BitArrayBitweise 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)BitArrayBitweise 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)BitArrayBitweise 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()BitArrayBitweise NOT-Operation, die jedes Bit der aktuellen Instanz invertiert, sie direkt ändert und die aktuelle Instanz selbst zurückgibt.
Set(int index, bool value)voidSetzt das Bit am angegebenen Index auf den angegebenen Wert (trueoderfalse)。
SetAll(bool value)voidSetzt alle Bits auf den angegebenen Wert (trueoderfalse)。
Get(int index)boolRuft den Wert des Bits am angegebenen Index ab.
Clone()objectAktuelles erstellenBitArrayEine flache Kopie (Duplikat) von.
CopyTo(Array array, int index)voidwirdBitArrayKopiert den Inhalt in das angegebene Array, beginnend am angegebenen Index.
Equals(object obj)boolBestimmt, ob das angegebene Objekt gleich dem aktuellen istBitArray。
GetEnumerator()IEnumeratorGibt 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.

Vergleich zweier Bit-Reihenfolgen für den Wert 13
Übliche Schreibreihenfolge (höchstwertiges Bit zuerst):
0
Bit 7
0
Bit 6
0
Bit 5
0
Bit 4
1
Bit 3
1
Bit 2
0
Bit 1
1
Bit 0
Indizierungsreihenfolge von BitArray (Index 0 entspricht dem niederwertigsten Bit):
1
Index 0
0
Index 1
1
Index 2
1
Index 3
0
Index 4
0
Index 5
0
Index 6
0
Index 7
Beim selben Wert 13 erhalten wir beim Durchlaufen des BitArray in der korrekten Indexreihenfolge 1 0 1 1 0 0 0 0, und die übliche Schreibreihenfolge ist genau umgekehrt, daher wird im Beispiel die Ausgabe in umgekehrter Richtung durchlaufen.

Beispiel

using System;
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

C#-Sammlungen

Weitere Erweiterungen