C# Tableau de bits (BitArray)
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'attribut | Type | Description |
|---|---|---|
Count | int | ObtientBitArrayLe nombre de bits contenus (en lecture seule). |
Length | int | Obtient ou définitBitArrayLe nombre de bits dans (prend en charge le redimensionnement dynamique). |
IsReadOnly | bool | Obtient une valeur indiquant si leBitArrayest en lecture seule (toujoursfalse)。 |
SyncRoot | object | Obtient un objet utilisé pour synchroniser l'accès à laBitArrayaccès. |
IsSynchronized | bool | Obtient une valeur indiquant si l'accès auBitArrayest synchronisé (thread-safe). |
Item[int index] | bool | Obtient 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éthode | Type de retour | Description |
|---|---|---|
And(BitArray) | BitArray | Opé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) | BitArray | Opé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) | BitArray | Opé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() | BitArray | Opé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) | void | Définit le bit à l'index spécifié sur la valeur spécifiée (trueoufalse)。 |
SetAll(bool value) | void | Définit tous les bits sur la valeur spécifiée (trueoufalse)。 |
Get(int index) | bool | Obtient la valeur du bit à l'index spécifié. |
Clone() | object | Créer l'actuelBitArrayUne copie superficielle (duplicata) de. |
CopyTo(Array array, int index) | void | vaBitArrayCopie le contenu dans le tableau spécifié, en commençant à l'index spécifié. |
Equals(object obj) | bool | Détermine si l'objet spécifié est égal à l'actuelBitArray。 |
GetEnumerator() | IEnumerator | Retourne 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.
Exemple
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
autres extensions