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

這裏寫圖片描述

發佈了115 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章