C# BitArray

C# 集合C# Colecciones

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 propiedadTipoDescripción
CountintObtieneBitArrayel número de bits (solo lectura) en.
LengthintObtiene o estableceBitArrayel número de bits (admite ajuste dinámico de tamaño) en.
IsReadOnlyboolObtiene un valor que indicaBitArraysi es de solo lectura (siempre esfalse)。
SyncRootobjectObtiene un objeto para sincronizar elBitArrayacceso a.
IsSynchronizedboolObtiene un valor que indica si elBitArrayacceso a está sincronizado (seguro para subprocesos).
Item[int index]boolObtiene 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étodoTipo de retornoDescripción
And(BitArray)BitArrayOperació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)BitArrayOperació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)BitArrayOperació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()BitArrayOperació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)voidEstablece el bit en el índice especificado al valor especificado (trueofalse)。
SetAll(bool value)voidEstablece todos los bits al valor especificado (trueofalse)。
Get(int index)boolObtiene el valor del bit en el índice especificado.
Clone()objectCrea una copia superficial de laBitArrayactual (copia).
CopyTo(Array array, int index)voidva aBitArraycopia el contenido en la matriz especificada, a partir del índice especificado.
Equals(object obj)boolDetermina si el objeto especificado es igual a la instancia actual.BitArray。
GetEnumerator()IEnumeratorDevuelve 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 copianew BitArray(ba1)para crear una copia.

Comparación de los dos órdenes de bits para el valor 13
Orden de escritura habitual (el bit más significativo primero):
0
bit 7
0
bit 6
0
bit 5
0
bit 4
1
bit 3
1
bit 2
0
bit 1
1
bit 0
Orden de índice de BitArray (el índice 0 corresponde al bit menos significativo):
1
índice 0
0
índice 1
1
índice 2
1
índice 3
0
índice 4
0
índice 5
0
índice 6
0
índice 7
Para el mismo valor 13, al recorrer el BitArray en orden ascendente de índices se obtiene 1 0 1 1 0 0 0 0, que es exactamente el orden inverso al de escritura habitual, por lo que en el ejemplo se utiliza un recorrido inverso para la salida.

Ejemplo

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

C# 集合C# Colecciones

Otras extensiones