现在位置: 首页 > C# 教程 > 正文

C# 点阵列(BitArray)

C# 集合 C# 集合

BitArray 是 C# 中用于表示一组位(bit)值的集合。

BitArray 属于 System.Collections 命名空间,主要用于处理二进制数据或进行位操作,相比使用布尔数组(bool[]),BitArray 更加高效,因为它以紧凑的方式存储每个位。

BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。

当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。

BitArray 类的方法和属性

下表列出了 BitArray 类的一些常用的 属性

属性名称类型描述
Countint获取 BitArray 中的位数(只读)。
Lengthint获取或设置 BitArray 中的位数(支持动态调整大小)。
IsReadOnlybool获取一个值,指示 BitArray 是否为只读(始终为 false)。
SyncRootobject获取一个对象,用于同步对 BitArray 的访问。
IsSynchronizedbool获取一个值,指示对 BitArray 的访问是否同步(线程安全)。
Item[int index]bool获取或设置指定索引处的位的值(通过索引器访问)。

属性访问:

BitArray bits = new BitArray(8);
Console.WriteLine(bits.Length); // 输出:8
bits.Length = 10; // 修改长度为 10

下表列出了 BitArray 类的一些常用的 方法

方法名称返回类型描述
And(BitArray)BitArray按位与操作,将两个 BitArray 对应位进行与运算,并返回结果。
Or(BitArray)BitArray按位或操作,将两个 BitArray 对应位进行或运算,并返回结果。
Xor(BitArray)BitArray按位异或操作,将两个 BitArray 对应位进行异或运算,并返回结果。
Not()BitArray按位取反操作,将 BitArray 的每个位取反,并返回结果。
Set(int index, bool value)void将指定索引处的位设置为指定值(truefalse)。
SetAll(bool value)void将所有位设置为指定值(truefalse)。
Get(int index)bool获取指定索引处的位的值。
Clone()object创建当前 BitArray 的浅表副本(复制)。
CopyTo(Array array, int index)voidBitArray 的内容复制到指定的数组,从指定索引开始。
Equals(object obj)bool确定指定对象是否等于当前 BitArray
GetEnumerator()IEnumerator返回一个枚举器,用于循环访问 BitArray 中的位。

方法使用:

BitArray bits = new BitArray(8, false); // 创建 8 位数组,全部为 false
bits.Set(0, true); // 设置第 0 位为 true
Console.WriteLine(bits.Get(0)); // 输出:True
bits.SetAll(true); // 全部设置为 true

实例

下面的实例演示了点阵列(BitArray)的使用:

实例

using System;
using System.Collections;

namespace CollectionsApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化两个 BitArray,用于存储二进制位
            BitArray ba1 = new BitArray(new byte[] { 60 }); // 60 = 00111100
            BitArray ba2 = new BitArray(new byte[] { 13 }); // 13 = 00001101

            // 输出 ba1 和 ba2 的内容
            Console.WriteLine("Bit array ba1 (60):");
            PrintBitArray(ba1);

            Console.WriteLine("Bit array ba2 (13):");
            PrintBitArray(ba2);

            // 进行 AND 操作并输出结果
            BitArray baAnd = ba1.And(ba2); // 60 & 13 = 12
            Console.WriteLine("Bit array after AND operation (12):");
            PrintBitArray(baAnd);

            // 进行 OR 操作并输出结果
            BitArray baOr = ba1.Or(ba2); // 60 | 13 = 61
            Console.WriteLine("Bit array after OR operation (61):");
            PrintBitArray(baOr);

            Console.ReadKey();
        }

        // 输出 BitArray 的值
        static void PrintBitArray(BitArray bitArray)
        {
            foreach (bool bit in bitArray)
            {
                Console.Write($"{(bit ? 1 : 0)} ");
            }
            Console.WriteLine("\n");
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

Bit array ba1 (60):
0 0 1 1 1 1 0 0 

Bit array ba2 (13):
1 1 0 1 0 0 0 0 

Bit array after AND operation (12):
0 0 0 1 0 0 0 0 

Bit array after OR operation (61):
1 1 1 1 1 1 0 0 

C# 集合 C# 集合