[C#.NET][VB.NET] 二進位運算 BitVector32

  • 12828
  • 0
  • C#
  • 2009-06-11

[C#.NET][VB.NET] 二進位運算 BitVector32

1.BitVector32 結構是用來處理二進位運算

2.它將所有資料儲存成單一的32 bit整數

3.它提供Data屬性,以截取資料

 

如何使用 BitVector32 結構,進行位元處理

1.匯入命名空間

using System.Collections.Specialized;

 

2.引用BitVector32,傳入初始值0,以清除所有位元的值

//引用BitVector32,傳入初始值0,以清除所有位元的值
BitVector32 myBit = new BitVector32(0);

 

3.呼叫BitVector32.CreateMask方法,但不傳入任何參數,建立第一個位元的遮罩

//呼叫BitVector32.CreateMask方法,但不傳入任何參數,建立第一個位元的遮罩
int myBit1 = BitVector32.CreateMask();

 

4.再次呼叫BitVector32.CreateMask方法,並傳入上一個建立的遮罩

//再次呼叫BitVector32.CreateMask方法,並傳入上一個建立的遮罩
int myBit2 = BitVector32.CreateMask(myBit1);
int myBit3 = BitVector32.CreateMask(myBit2);
int myBit4 = BitVector32.CreateMask(myBit3);
int myBit5 = BitVector32.CreateMask(myBit4);

 

5.利用索引值將位元設為true

 

 

 

//利用索引值將位元設為true
myBit[myBit1] = true;
myBit[myBit4] = true;

 

6.輸出

//輸出
Console.WriteLine(myBit);
Console.WriteLine("結果={0}",myBit.Data);

 

輸出結果如下

1

如何使用 BitVector32 類別,做位元包裝Bit Packing

它可以讓你建立結構區段,用來儲存某個大小的數值,但一開始就必須建立這些區段,建立區段建立遮罩的方法大致相同。

假設現在我有四個數值最大值分別是8,16,24,32。

1.匯入命名空間

using System.Collections.Specialized;

2.引用BitVector32,傳入初始值0,以清除所有位元的值

//引用BitVector32,傳入初始值0,以清除所有位元的值
BitVector32 myBit = new BitVector32(0);

3.引用BitVector32.Section結構,建立區段

//在BitVector32建立四個值最大值分別是8,16,24,32
//建立區段
BitVector32.Section mySect1 = BitVector32.CreateSection(8);
BitVector32.Section mySect2 = BitVector32.CreateSection(16, mySect1);
BitVector32.Section mySect3 = BitVector32.CreateSection(24, mySect2);
BitVector32.Section mySect4 = BitVector32.CreateSection(32, mySect3);

 

4.指定數值,指定的數值不能超過區段最大值

myBit[mySect1] = 7;//指定數值,指定的數值不能超過區段最大值

 

 

5.輸出

//輸出
Console.WriteLine("初始值 , 二進位 = {0} , 十進位 = {1}", myBit.ToString(), myBit.Data);
myBit[mySect1] = 7;//指定數值,指定的數值不能超過區段最大值
Console.WriteLine("第1段 , 二進位 = {0} , 十進位 = {1}", myBit.ToString(), myBit.Data);
myBit[mySect2] = 15;
Console.WriteLine("第2段 , 二進位 = {0} , 十進位 = {1}", myBit.ToString(), myBit.Data);
myBit[mySect3] = 24;
Console.WriteLine("第3段 , 二進位 = {0} , 十進位 = {1}", myBit.ToString(), myBit.Data);
myBit[mySect4] = 32;
Console.WriteLine("第4段 , 二進位 = {0} , 十進位 = {1}", myBit.ToString(), myBit.Data);

1

範例已包含VB與C#

範例下載:二進位運算BitVector32.rar

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo