C# BitArray:点阵列

在 C# 中,BitArray 类用来管理一个紧凑型的位值数组,数组中的值均为布尔类型,其中 true(1)表示此位为开启,false(0)表示此位为关闭。

当您需要存储位(英文名“bit”数据存储的最小单位,也可称为比特),但事先又不知道具体位数时,就可以使用点阵列。当需要访问点阵列中的元素时,可以使用整型索引从点阵列中访问指定元素,索引从零开始。

BitArray 类中的属性

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

属性 描述
Count 获取点阵列中包含的元素个数
IsReadOnly 判断 点阵列是否只读
Item 获取或设置点阵列中指定位置的值
Length 获取或设置点阵列中的元素个数

BitArray 类中的方法

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

方法名 描述
public BitArray And(BitArray value) 对当前的点阵列中的元素和指定点阵列中相对应的元素执行按位与操作
public bool Get(int index) 获取点阵列中指定位置的位值
public BitArray Not() 反转当前点阵列中所有位的值,即将 true 设置为 false,将 false 设置为 true
public BitArray Or(BitArray value) 对当前点阵列中的元素和指定点阵列中的相对应的元素执行按位或操作
public void Set(int index, bool value) 把点阵列中指定位置的位设置为指定的值
public void SetAll(bool value) 把点阵列中的所有位设置为指定的值
public BitArray Xor(BitArray value) 对当前点阵列中的元素和指定点阵列中的相对应的元素执行按位异或操作

关于 BitArray 类中的完整属性和方法介绍,可以查阅 C# 官方文档

【示例】下面通过示例演示 BitArray 类属性和方法的使用:
using System;
using System.Collections;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            // 创建两个大小为 8 的点阵列
            BitArray ba1 = new BitArray(8);
            BitArray ba2 = new BitArray(8);
            byte[] a = { 60 };
            byte[] b = { 13 };
          
            // 把值 60 和 13 存储到点阵列中
            ba1 = new BitArray(a);
            ba2 = new BitArray(b);

            // ba1 的内容
            Console.WriteLine("点阵列 ba1: 60");
            for (int i = 0; i < ba1.Count; i++)
            {
                Console.Write("{0, -6} ", ba1[i]);
            }
            Console.WriteLine();
          
            // ba2 的内容
            Console.WriteLine("点阵列 ba2: 13");
            for (int i = 0; i < ba2.Count; i++)
            {
                Console.Write("{0, -6} ", ba2[i]);
            }
            Console.WriteLine();
          
          
            BitArray ba3 = new BitArray(8);
            ba3 = ba1.And(ba2);

            // ba3 的内容
            Console.WriteLine("执行按位与操作后的点阵列 ba3:");
            for (int i = 0; i < ba3.Count; i++)
            {
                Console.Write("{0, -6} ", ba3[i]);
            }
            Console.WriteLine();

            ba3 = ba1.Or(ba2);
            // ba3 的内容
            Console.WriteLine("执行按位或操作后的点阵列 ba3:");
            for (int i = 0; i < ba3.Count; i++)
            {
                Console.Write("{0, -6} ", ba3[i]);
            }
            Console.WriteLine();
          
            Console.ReadKey();
        }
    }
}
运行结果如下:

点阵列 ba1: 60
False  False  True   True   True   True   False  False
点阵列 ba2: 13
True   False  True   True   False  False  False  False
执行按位与操作后的点阵列 ba3:
False  False  True   True   False  False  False  False
执行按位或操作后的点阵列 ba3:
True   False  True   True   False  False  False  False