C# 点阵列(BitArray)
BitArray 是 C# 中用于表示一组位(bit)值的集合。
BitArray 属于 System.Collections 命名空间,主要用于处理二进制数据或进行位操作,相比使用布尔数组(bool[]),BitArray 更加高效,因为它以紧凑的方式存储每个位。
BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。
当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。
BitArray 类的方法和属性
下表列出了 BitArray 类的一些常用的 属性:
属性名称 | 类型 | 描述 |
---|---|---|
Count | int | 获取 BitArray 中的位数(只读)。 |
Length | int | 获取或设置 BitArray 中的位数(支持动态调整大小)。 |
IsReadOnly | bool | 获取一个值,指示 BitArray 是否为只读(始终为 false )。 |
SyncRoot | object | 获取一个对象,用于同步对 BitArray 的访问。 |
IsSynchronized | bool | 获取一个值,指示对 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 | 将指定索引处的位设置为指定值(true 或 false )。 |
SetAll(bool value) | void | 将所有位设置为指定值(true 或 false )。 |
Get(int index) | bool | 获取指定索引处的位的值。 |
Clone() | object | 创建当前 BitArray 的浅表副本(复制)。 |
CopyTo(Array array, int index) | void | 将 BitArray 的内容复制到指定的数组,从指定索引开始。 |
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");
}
}
}
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