集合(10-位数组)

概念

如果需要处理很多位,就可以使用位数组。数组中每一位只能是0或1,即假或真。

BitArray的使用

BitArray是引用类型,长度是可以伸缩的,当不确定位的长度时可以使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace ConsoleApplication36
{
    class Program
    {
        static void Main(string[] args)
        {
            BitArray bits = new BitArray(8);
            bits.SetAll(true);
            bits.Set(1, false);
            bits[3] = false;
            Console.WriteLine("使用set和索引器:");
            Console.WriteLine(Convert.ToString(bits)); 
            Console.WriteLine("使用NOT取反:");
            bits.Not();
            Console.WriteLine(Convert.ToString(bits));

            BitArray bits1 = new BitArray(new bool[] { true, true, false, false, true, true, false, false });
            BitArray bits2 = new BitArray(new bool[] { true, false, false, true, true, true, false, false });

            Console.WriteLine("\n执行bits1.And(bits2)前: \nbits1={0}\nbits2={1}", Convert.ToString(bits1), Convert.ToString(bits2));
            Console.WriteLine("执行bits1.And(bits2)后: \nbits1={0}", Convert.ToString(bits1.And(bits2)));


             bits1 = new BitArray(new bool[] { true, true, false, false, true, true, false, false });
             bits2 = new BitArray(new bool[] { true, false, false, true, true, true, false, false });
             Console.WriteLine("\n执行bits1.Or(bits2)前: \nbits1={0}\nbits2={1}", Convert.ToString(bits1), Convert.ToString(bits2));
             Console.WriteLine("执行bits1.Or(bits2)后: \nbits1={0}", Convert.ToString(bits1.Or(bits2)));

             bits1 = new BitArray(new bool[] { true, true, false, false, true, true, false, false });
             bits2 = new BitArray(new bool[] { true, false, false, true, true, true, false, false });
             Console.WriteLine("\n执行bits1.Xor(bits2)前: \nbits1={0}\nbits2={1}", Convert.ToString(bits1), Convert.ToString(bits2));
             Console.WriteLine("执行bits1.Xor(bits2)后: \nbits1={0}", Convert.ToString(bits1.Xor(bits2)));
        }
    }
    public partial class Convert
    {
        public static string ToString(BitArray bits)
        {
            StringBuilder sb = new StringBuilder();
            foreach (bool item in bits)
            {
                sb.Append(item ? 1 : 0);
            }
            return sb.ToString();
        }
    }
}

输出结果:
这里写图片描述

从代码可以看出:
1. 使用部分类partial,为Convert提供扩展方法,可以支持BitArray转string
2. BitArray类可以使用SetAll、Set、和索引器等进行位赋值
3. 位与运算And (两个同时为1时结果为1)
4. 位或运算Or(其中只要有一个为1结果就为1)
5. 位异或运算Xor(两个同时为1时结果为0)

BitVector32的使用

BitVector32是值类型,因此处理速度比BitArray快,但是长度固定为32位。

掩码

        static void Main(string[] args)
        {
            Console.WriteLine("掩码的规律:");
            Console.WriteLine("BitVector32.CreateMask():{0}",BitVector32.CreateMask());
            Console.WriteLine("BitVector32.CreateMask(1):{0}", BitVector32.CreateMask(1));
            Console.WriteLine("BitVector32.CreateMask(2):{0}", BitVector32.CreateMask(2));
            Console.WriteLine("BitVector32.CreateMask(3):{0}", BitVector32.CreateMask(3));
            Console.WriteLine("BitVector32.CreateMask(4):{0}", BitVector32.CreateMask(4));
            Console.WriteLine("BitVector32.CreateMask(5):{0}", BitVector32.CreateMask(5));
            Console.WriteLine("BitVector32.CreateMask(6):{0}", BitVector32.CreateMask(6));
            Console.WriteLine("BitVector32.CreateMask(7):{0}", BitVector32.CreateMask(7));
            Console.WriteLine("BitVector32.CreateMask(8):{0}", BitVector32.CreateMask(8));
        }

输出结果:
这里写图片描述

可以看出,结果都是传递的参数*2
规律如下:
这里写图片描述

  1. 把10进制参数转换为2进制
  2. 2进制向左移一位,最后一位补0
  3. 得到二进制掩码,返回一个10进制

16进制 10进制 2进制转换

        static void Main(string[] args)
        {
            Console.WriteLine("16进制:a");
            int number = 0xa;
            Console.WriteLine("10进制:{0}",number);
            BitVector32 bits=new BitVector32();
            bits[number]=true;
            Console.WriteLine("2进制:{0}", bits.ToString());
        }

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值