C# Tableau de bits (BitArray)

Collections C#

BitArray est une collection en C# utilisée pour représenter un ensemble de valeurs de bits.

BitArray appartient à l'espace de noms System.Collections et est principalement utilisé pour traiter des données binaires ou effectuer des opérations sur les bits.

Comparé à l'utilisation d'un tableau booléen (bool[]), BitArray est plus efficace car il stocke chaque bit de manière compacte.

La classe BitArray gère un tableau compact de valeurs de bits, représentées à l'aide de valeurs booléennes.

true signifie que le bit est activé (1), false signifie que le bit est désactivé (0)。

Lorsque vous devez stocker des bits mais que vous ne connaissez pas le nombre de bits à l'avance, utilisez un BitArray.

Vous pouvez utiliserIndex entierpour accéder aux éléments de la collection BitArray, l'index commençant à zéro.

Méthodes et propriétés de la classe BitArray

Le tableau ci-dessous répertorieBitArrayQuelques-unes couramment utilisées de la classePropriété:

Nom de l'attributTypeDescription
CountintObtientBitArrayLe nombre de bits contenus (en lecture seule).
LengthintObtient ou définitBitArrayLe nombre de bits dans (prend en charge le redimensionnement dynamique).
IsReadOnlyboolObtient une valeur indiquant si leBitArrayest en lecture seule (toujoursfalse)。
SyncRootobjectObtient un objet utilisé pour synchroniser l'accès à laBitArrayaccès.
IsSynchronizedboolObtient une valeur indiquant si l'accès auBitArrayest synchronisé (thread-safe).
Item[int index]boolObtient ou définit la valeur du bit à l'index spécifié (accédé via l'indexeur).

Accès à la propriété :

BitArray bits = new BitArray(8); // 创建 8 位的 BitArray,所有位默认为 false
Console.WriteLine(bits.Length); // 输出:8
bits.Length = 10; // 修改长度为 10,新增的位默认为 false

Le tableau ci-dessous répertorieBitArrayQuelques-unes couramment utilisées de la classeMéthodes:

Nom de la méthodeType de retourDescription
And(BitArray)BitArrayOpération AND bit à bit, sur deuxBitArrayeffectue une opération AND sur les bits correspondants, modifie l'instance actuelle sur place et retourne l'instance actuelle elle-même.
Or(BitArray)BitArrayOpération OR bit à bit, sur deuxBitArrayeffectue une opération OR sur les bits correspondants, modifie l'instance actuelle sur place et retourne l'instance actuelle elle-même.
Xor(BitArray)BitArrayOpération XOR bit à bit, sur deuxBitArrayeffectue une opération XOR sur les bits correspondants, modifie l'instance actuelle sur place et retourne l'instance actuelle elle-même.
Not()BitArrayOpération NOT bit à bit, qui inverse chaque bit de l'instance actuelle, la modifie sur place et retourne l'instance actuelle elle-même.
Set(int index, bool value)voidDéfinit le bit à l'index spécifié sur la valeur spécifiée (trueoufalse)。
SetAll(bool value)voidDéfinit tous les bits sur la valeur spécifiée (trueoufalse)。
Get(int index)boolObtient la valeur du bit à l'index spécifié.
Clone()objectCréer l'actuelBitArrayUne copie superficielle (duplicata) de.
CopyTo(Array array, int index)voidvaBitArrayCopie le contenu dans le tableau spécifié, en commençant à l'index spécifié.
Equals(object obj)boolDétermine si l'objet spécifié est égal à l'actuelBitArray。
GetEnumerator()IEnumeratorRetourne un énumérateur qui parcourtBitArrayle bit dans.

Utilisation de la méthode :

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

Exemple

L'exemple suivant illustre l'utilisation de BitArray :

Dans BitArrayL'index 0 correspond au bit de poids faible d'un nombre binaireLa chaîne de bits obtenue en parcourant dans l'ordre d'index croissant est opposée à l'ordre d'écriture normal ; par conséquent, l'exemple suivant utilise un parcours inverse pour la sortie.

Les méthodes telles que And(), Or(), Xor() vont effectuer uneModification en placeElles appellent l'instance et la renvoient elle-même, donc un constructeur de copie est utilisé avant chaque opération.new BitArray(ba1)Créer une copie.

Comparaison de deux ordres de bits pour la valeur 13
Ordre d'écriture habituel (bit de poids fort en premier) :
0
Bit 7
0
Bit 6
0
Bit 5
0
Bit 4
1
Bit 3
1
Bit 2
0
Bit 1
1
Bit 0
Ordre d'indexation de BitArray (l'indice 0 correspond au bit de poids faible) :
1
indice 0
0
indice 1
1
Indice 2
1
Indice 3
0
Indice 4
0
Indice 5
0
Indice 6
0
Indice 7
Pour la même valeur 13, en parcourant le BitArray dans le bon ordre des indices, nous obtenons 1 0 1 1 0 0 0 0, et l'ordre correct d'écriture quotidienne de la séquence est inversé, par conséquent dans l'exemple, utilisez un parcours inverse en sortie.

Exemple

using System;
using System.Collections;

namespace CollectionsApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialiser deux BitArray pour stocker des bits binaires
            BitArray ba1 = new BitArray(new byte[] { 60 }); // 60 = 00111100
            BitArray ba2 = new BitArray(new byte[] { 13 }); // 13 = 00001101

            // Afficher le contenu de ba1 et ba2
            Console.WriteLine("Tableau de bits ba1 (60) :");
            PrintBitArray(ba1);

            Console.WriteLine("Tableau de bits ba2 (13) :");
            PrintBitArray(ba2);

            // Effectuer l'opération AND et afficher le résultat
            // And/Or/Xor modifient en place les instances qui les appellent ; créez une copie de ba1 avant l'opération.
            BitArray baAnd = new BitArray(ba1);
            baAnd.And(ba2); // 60 & 13 = 12
            Console.WriteLine("Tableau de bits après l'opération AND (12) :");
            PrintBitArray(baAnd);

            // Effectuer une opération OR et afficher le résultat
            BitArray baOr = new BitArray(ba1); // Copier à nouveau le ba1 d'origine.
            baOr.Or(ba2); // 60 | 13 = 61
            Console.WriteLine("Tableau de bits après l'opération OR (61):");
            PrintBitArray(baOr);

            // Effectuer une opération XOR et afficher le résultat
            BitArray baXor = new BitArray(ba1); // Continuer à copier le ba1 d'origine.
            baXor.Xor(ba2); // 60 ^ 13 = 49
            Console.WriteLine("Tableau de bits après l'opération XOR (49):");
            PrintBitArray(baXor);

            Console.ReadKey();
        }

        // Parcours inverse afin que la sortie soit conforme à la convention "chiffre le plus significatif en premier"
        static void PrintBitArray(BitArray bitArray)
        {
            for (int i = bitArray.Length - 1; i >= 0; i--)
            {
                Console.Write($"{(bitArray[i] ? 1 : 0)} ");
            }
            Console.WriteLine("\n");
        }
    }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

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

Collections C#

autres extensions