C# BitArray
BitArray es una colección en C# que se utiliza para representar un conjunto de valores de bits.
BitArray pertenece al espacio de nombres System.Collections y se usa principalmente para manejar datos binarios o realizar operaciones de bits.
En comparación con el uso de una matriz booleana (bool[]), BitArray es más eficiente porque almacena cada bit de forma compacta.
La clase BitArray administra una matriz compacta de valores de bits, que se representa mediante valores booleanos.
true indica que el bit está activado (1), false indica que el bit está desactivado (0).。
Cuando necesite almacenar bits pero no sepa el número de bits de antemano, use BitArray.
Puede usaríndice enteropara acceder a los elementos de la colección BitArray, los índices comienzan en cero.
Métodos y propiedades de la clase BitArray
La siguiente tabla enumeraBitArrayalgunas de las más comunes de la clasepropiedades:
| Nombre de propiedad | Tipo | Descripción |
|---|---|---|
Count | int | ObtieneBitArrayel número de bits (solo lectura) en. |
Length | int | Obtiene o estableceBitArrayel número de bits (admite ajuste dinámico de tamaño) en. |
IsReadOnly | bool | Obtiene un valor que indicaBitArraysi es de solo lectura (siempre esfalse)。 |
SyncRoot | object | Obtiene un objeto para sincronizar elBitArrayacceso a. |
IsSynchronized | bool | Obtiene un valor que indica si elBitArrayacceso a está sincronizado (seguro para subprocesos). |
Item[int index] | bool | Obtiene o establece el valor del bit en el índice especificado (se accede mediante indizador). |
Acceso a propiedades:
BitArray bits = new BitArray(8); // 创建 8 位的 BitArray,所有位默认为 false Console.WriteLine(bits.Length); // 输出:8 bits.Length = 10; // 修改长度为 10,新增的位默认为 false
La siguiente tabla enumeraBitArrayalgunas de las más comunes de la clasemétodos:
| Nombre de método | Tipo de retorno | Descripción |
|---|---|---|
And(BitArray) | BitArray | Operación AND bit a bit, en los dosBitArraybits correspondientes, realiza la operación AND, modifica in situ la instancia actual y devuelve la propia instancia. |
Or(BitArray) | BitArray | Operación OR bit a bit, en los dosBitArraybits correspondientes, realiza la operación OR, modifica in situ la instancia actual y devuelve la propia instancia. |
Xor(BitArray) | BitArray | Operación XOR bit a bit, en los dosBitArraybits correspondientes, realiza la operación XOR, modifica in situ la instancia actual y devuelve la propia instancia. |
Not() | BitArray | Operación de complemento bit a bit, invierte cada bit de la instancia actual, modifica in situ y devuelve la propia instancia. |
Set(int index, bool value) | void | Establece el bit en el índice especificado al valor especificado (trueofalse)。 |
SetAll(bool value) | void | Establece todos los bits al valor especificado (trueofalse)。 |
Get(int index) | bool | Obtiene el valor del bit en el índice especificado. |
Clone() | object | Crea una copia superficial de laBitArrayactual (copia). |
CopyTo(Array array, int index) | void | va aBitArraycopia el contenido en la matriz especificada, a partir del índice especificado. |
Equals(object obj) | bool | Determina si el objeto especificado es igual a la instancia actual.BitArray。 |
GetEnumerator() | IEnumerator | Devuelve un enumerador que itera a través deBitArraylos bits en. |
Uso de métodos:
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
Ejemplo
El siguiente ejemplo demuestra el uso de BitArray:
En BitArrayel índice 0 corresponde al bit menos significativo del número binario, la cadena de bits obtenida al recorrer en orden ascendente de índices es inversa al orden de escritura habitual, por lo que el siguiente ejemplo utiliza un recorrido inverso para la salida.
Los métodos And(), Or(), Xor(), etc.,modifican in situla instancia que los llama y devuelven la propia instancia, por lo que antes de cada operación se utiliza el constructor de copia
new BitArray(ba1)para crear una copia.
Ejemplo
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
// Inicializa dos BitArray para almacenar bits binarios
BitArray ba1 = new BitArray(new byte[] { 60 }); // 60 = 00111100
BitArray ba2 = new BitArray(new byte[] { 13 }); // 13 = 00001101
// Muestra el contenido de ba1 y ba2
Console.WriteLine("Bit array ba1 (60):");
PrintBitArray(ba1);
Console.WriteLine("Bit array ba2 (13):");
PrintBitArray(ba2);
// Realiza la operación AND y muestra el resultado
// And/Or/Xor modifican in situ la instancia que los llama; antes de la operación se crea una copia de ba1
BitArray baAnd = new BitArray(ba1);
baAnd.And(ba2); // 60 & 13 = 12
Console.WriteLine("Bit array after AND operation (12):");
PrintBitArray(baAnd);
// Realiza la operación OR y muestra el resultado
BitArray baOr = new BitArray(ba1); // Copia nuevamente el ba1 original
baOr.Or(ba2); // 60 | 13 = 61
Console.WriteLine("Bit array after OR operation (61):");
PrintBitArray(baOr);
// Realiza la operación XOR y muestra el resultado
BitArray baXor = new BitArray(ba1); // Continúa copiando el ba1 original
baXor.Xor(ba2); // 60 ^ 13 = 49
Console.WriteLine("Bit array after XOR operation (49):");
PrintBitArray(baXor);
Console.ReadKey();
}
// Recorrido inverso para que la salida cumpla con el hábito de escritura "el bit más significativo primero"
static void PrintBitArray(BitArray bitArray)
{
for (int i = bitArray.Length - 1; i >= 0; i--)
{
Console.Write($"{(bitArray[i] ? 1 : 0)} ");
}
Console.WriteLine("\n");
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
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
Otras extensiones
C# Colecciones