集合(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()); }
相关文章推荐
- Effective Java 读书笔记——43:返回零长度的数组或者集合,而不是null
- Foundation的基本操作—字符串、数组、字典、集合
- 对象的集合 -- 栈,使用stl 中的vector 或者 原始数组来实现
- java中 列表,集合,数组之间的转换
- android SharedPreferences保存数组或集合
- OC-集合1(数组)
- Mongodb数组操作$(update)、$占位符更新嵌套数组、嵌套文档集合
- java中数组和集合的相互转换
- Java中数组与集合转换的注意事项
- 数组和集合
- js中的Array对象转成字符串;java中的List转成String数组, List集合的合并
- 遍历数组和集合
- 集合与数组之间相互转换
- swift字符串,数组,字典和集合的遍历
- 工具类 Collections Arrays asList 数组变集合 集合变数组 高级for循环 可变参数 。。。 静态导入
- Java工具类(四) 判断数组/集合为空的工具类
- 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合
- 建议92:谨慎将数组或集合作为属性
- spring学习笔记(三) --- bean中的引用赋值和数组/集合赋值
- java中 set,list,array(集合与数组)相互转换