您的位置:首页 > 其它

集合(10-位数组)

2016-12-09 15:01 337 查看

概念

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

规律如下:



把10进制参数转换为2进制

2进制向左移一位,最后一位补0

得到二进制掩码,返回一个10进制

16进制 10进制 2进制转换

bf41
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());
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: