學用 ASP.Net 之 System.Collections.Specialized.BitVector32 結構

來源:互聯網
上載者:User
BitVector32 結構只提供 32 位大小的儲存空間(同 Int32), 通過它可以快速存取布爾值或小整數(譬如 7 以內或 15 以內的小整數等等).
主要成員:
/* 屬性 */Data; //其 32 位值的整數表示, 唯讀; 可以通過它持久記錄 BitVector32 的狀態/* 靜態方法 */BitVector32.CreateMask();    //建立 MaskBitVector32.CreateSection(); //建立 BitVector32.SectionBitVector32.ToString();      //返回指定 BitVector32 對象的位狀態字串/* 方法 */ToString(); //返回位狀態字串/* 與之相關的結構 BitVector32.Section 也有兩個屬性 */Mask;   //位元遮罩Offset; //位移
構建方法:
protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv1 = new BitVector32();           //同 new BitVector32(0);    BitVector32 bv2 = new BitVector32(0);          //置 32 個位全為 0    BitVector32 bv3 = new BitVector32(0x0000FF0F); //使用一個 int 值的 "位"    BitVector32 bv4 = new BitVector32(bv3);        //使用另一個 BitVector32 的資料構建    BitVector32 bv5 = new BitVector32(-1);         //這樣可全置位    string s1 = bv1.ToString(); //BitVector32{00000000000000000000000000000000}    string s2 = bv2.ToString(); //BitVector32{00000000000000000000000000000000}    string s3 = bv3.ToString(); //BitVector32{00000000000000001111111100001111}    string s4 = bv4.ToString(); //BitVector32{00000000000000001111111100001111}    string s5 = bv5.ToString(); //BitVector32{11111111111111111111111111111111}    TextBox1.Text = s1 + "\n" + s2 + "\n" + s3 + "\n" + s4 + "\n" + s5;}
數組式訪問:
//假如用 BitVector32 儲存一個數位話, 它能儲存 UInt32.MaxValue 個.protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    bv[1] = true;    string s1 = bv.ToString();    //BitVector32{00000000000000000000000000000001}    bv[-1] = false; bv[2] = true; //全部清空後重新賦值    string s2 = bv.ToString();    //BitVector32{00000000000000000000000000000010}    bv[-1] = false; bv[3] = true; //BitVector32{00000000000000000000000000000011}    string s3 = bv.ToString();    bv[-1] = false; bv[4] = true; //BitVector32{00000000000000000000000000000100}    string s4 = bv.ToString();    bv[-1] = false; bv[5] = true; //BitVector32{00000000000000000000000000000101}    string s5 = bv.ToString();    bv[-1] = false; bv[6] = true; //BitVector32{00000000000000000000000000000110}    string s6 = bv.ToString();    bv[-1] = false; bv[7] = true; //BitVector32{00000000000000000000000000000111}    string s7 = bv.ToString();    bv[-1] = false; bv[Int32.MaxValue] = true; //BitVector32{01111111111111111111111111111111}    string s8 = bv.ToString();    TextBox1.Text = s1 + "\n" + s2 + "\n" + s3 + "\n" + s4 + "\n" + s5 + "\n" + s6 + "\n" + s7 + "\n" + s8;}
分別訪問每一個位:
//這要通過位元遮罩(Mask)訪問protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    int n1 = (int)Math.Pow(2, 0);    int n2 = (int)Math.Pow(2, 1);    int n3 = (int)Math.Pow(2, 2);    int n4 = (int)Math.Pow(2, 3);    int n5 = (int)Math.Pow(2, 4);    int n32 = (int)Math.Pow(2, 31);    bv[n3] = true;    string s1 = bv.ToString(); //BitVector32{00000000000000000000000000000100}    bv[n1] = true;    bv[n2] = true;    bv[n3] = true;    bv[n4] = true;    bv[n5] = true;    bv[n32] = true;    string s2 = bv.ToString(); //BitVector32{10000000000000000000000000011111}    bv[-1] = true; //全置位    bv[n1] = false;    bv[n2] = false;    bv[n3] = false;    bv[n4] = false;    bv[n5] = false;    bv[n32] = false;    string s3 = bv.ToString(); //BitVector32{01111111111111111111111111100000}    TextBox1.Text = s1 + "\n" + s2 + "\n" + s3;}
BitVector32.CreateMask():
//這是設計者提供的訪問 BitVector32 位的方式protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    int mk1 = BitVector32.CreateMask();    //建立第一個 Mask, 或寫作 BitVector32.CreateMask(0);    int mk2 = BitVector32.CreateMask(mk1); //在 mk1 後建立 mk2    int mk3 = BitVector32.CreateMask(mk2); //在 mk2 後建立 mk3    int mk4 = BitVector32.CreateMask(mk3); //    int mk5 = BitVector32.CreateMask(mk4); //    //mk1 .. mk5 的值分別會是: 1、2、4、8、16    bv[mk3] = true;    string s1 = bv.ToString(); //BitVector32{00000000000000000000000000000100}    bv[mk1] = true;    bv[mk2] = true;    bv[mk3] = true;    bv[mk4] = true;    bv[mk5] = true;    string s2 = bv.ToString(); //BitVector32{00000000000000000000000000011111}    bv[-1] = true; //全置位    bv[mk1 | mk2 | mk3 | mk4 | mk5] = false; //可以使用 "|" 或 "+" 同時給幾個 Mask 賦值    string s3 = bv.ToString(); //BitVector32{11111111111111111111111111100000}    TextBox1.Text = s1 + "\n" + s2 + "\n" + s3;}
BitVector32.CreateSection():
//假如要使用 0..7 八個數字, 只需要二進位的 3 個位就可以了;//BitVector32.CreateSection(n) 就是在 BitVector32 中建立能放下 0..n 個小整數的 Section(片段)protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    BitVector32.Section sec = BitVector32.CreateSection(7);    string s0, s1, s2, s3, s4, s5, s6, s7;    bv[sec] = 0; s0 = bv.ToString(); //BitVector32{00000000000000000000000000000000}    bv[sec] = 1; s1 = bv.ToString(); //BitVector32{00000000000000000000000000000001}    bv[sec] = 2; s2 = bv.ToString(); //BitVector32{00000000000000000000000000000010}    bv[sec] = 3; s3 = bv.ToString(); //BitVector32{00000000000000000000000000000011}    bv[sec] = 4; s4 = bv.ToString(); //BitVector32{00000000000000000000000000000100}    bv[sec] = 5; s5 = bv.ToString(); //BitVector32{00000000000000000000000000000101}    bv[sec] = 6; s6 = bv.ToString(); //BitVector32{00000000000000000000000000000110}    bv[sec] = 7; s7 = bv.ToString(); //BitVector32{00000000000000000000000000000111}    TextBox1.Text = s0 + "\n" + s1 + "\n" + s2 + "\n" + s3 + "\n" + s4 + "\n" + s5 + "\n" + s6 + "\n" + s7;}
建立多個 Section:
//使用多個 Section 時, 和 BitVector32.CreateMask() 的理念一樣, 是基於一個建另一個, 挨著來.protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    BitVector32.Section secX = BitVector32.CreateSection(15);       //第一個 Section, 可儲存 0..15    BitVector32.Section secY = BitVector32.CreateSection(7, secX);  //secX 之後的 Section, 可儲存 0..7    BitVector32.Section secZ = BitVector32.CreateSection(15, secY); //secY 之後的 Section, 可儲存 0..15    //此時的記憶體佔用圖: 000000000000000000000ZZZZYYYXXXX    bv[secX] = 15;    bv[secY] = 0;    bv[secZ] = 15;    string s1 = bv.ToString(); //BitVector32{00000000000000000000011110001111}    bv[secX] = 1;    bv[secY] = 1;    bv[secZ] = 1;    string s2 = bv.ToString(); //BitVector32{00000000000000000000000010010001}    TextBox1.Text = s1 + "\n" + s2;}
BitVector32.CreateSection() 返回的 BitVector32.Section 也是個結構體:
protected void Button1_Click(object sender, EventArgs e){    BitVector32 bv = new BitVector32(0);    BitVector32.Section secX = BitVector32.CreateSection(15);          BitVector32.Section secY = BitVector32.CreateSection(7, secX);     BitVector32.Section secZ = BitVector32.CreateSection(15, secY);    TextBox1.Text  = string.Format("{0}, {1}, {2}\n", secX.Mask, secY.Mask, secZ.Mask);       //15, 7, 15    TextBox1.Text += string.Format("{0}, {1}, {2}\n", secX.Offset, secY.Offset, secZ.Offset); //0, 4, 7}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.