集合(10-位数组)

来源:互联网 发布:华傲数据借贷产品 编辑:程序博客网 时间:2024/05/18 00:00

概念

如果需要处理很多位,就可以使用位数组。数组中每一位只能是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
原创粉丝点击