处理位的集合(特殊的集合一种)

本文介绍了C#中处理位集合的两种方式:BitArray类和BitVector32结构。BitArray类适用于不确定位数的情况,可动态调整大小,而BitVector32结构效率高,适用于已知32位的需求。通过示例展示了如何使用这两个类型进行位操作,包括设置、取反、或、与、异或等,并解释了各自的特性与应用场景。
摘要由CSDN通过智能技术生成

如果需要处理的数字有许多位,C# 7为此提供了二进制字面量和数字分隔符。处理二进制数据时,还可以使用BitArray类和BitVector32结构。BitArry类位于名称空间System.Collections中,BitVector32结构位于名称空间System.Collections.Specialized中。这两种类型最重要的区别是,BitArray类可以重新设置大小,如果事先不知道需要的位数,就可以使用BitArray类,它可以包含非常多的位。BitVector32结构是基于栈的,因此比较快。BitVector32结构仅包含32位,它们存储在一个整数中。

BitArray类

BitArray类是一个引用类型,它包含一个int数组,其中每32位使用一个新整数。这个类的成员如下表所示。

注:按位运算符,它可以用于数字类型(如byte、short、int和long)。BitArray类具有类似的功能,但是可以用于不同数量的位,而不是用于C#类型。

BitArraySample使用如下名称空间:

System

System.Collections

System.Text

扩展方法GetBitFormat()遍历BitArray,根据位的设置情况,在控制台上显示1或0。为了获得更好的可读性,每4位添加一个分隔符:

using System;
using System.Collections;
using System.Text;

namespace 处理位的集合
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }

    public static class BitArrayExtensions
    {
        public static string GetBitsFormat(this BitArray bits)
        {
            var str = new StringBuilder();
            for (int i = bits.Length - 1; i >= 0; i--)
            {
                str.Append(bits[i] ? 1 : 0);
                if (i != 0 && i % 4 == 0)
                {
                    str.Append("_");
                }
            }
            return str.ToString();
        }
    }
}

 说明BitArray类的示例创建了一个包含9位的数组,其索引是0~8。SetAll()方法把这9位都设置位true。接着Set()方法把对应于1的位设置为false。除了Set()方法之外,还可以使用索引器,例如,下面的第5个和第7个索引:

        static void Main(string[] args)
        {
            var bits1 = new Bit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值