位陣列
假設須要處理非常多位,
就能夠使用
bitarray
類和bitvector32.bitarray
位於命名空間
system.collections中.
bitvector32位於命名空間
system.collections.speciallized.
bitarray類
類bitarray
是乙個引用引用型別
,包括乙個
int陣列,沒
32位使用乙個新整數.和
bool
型別的陣列
bool
幾乎相同
案例:using system;
using system.collections;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 可觀察的集合
class program
static void main(string args)
stack st = new stack();
st.push('a');
st.push('b');
st.push('c');
bitarray bits1 = new bitarray(8);//乙個有
8位的陣列
console.writeline("顯示陣列中全部位的預設值
:");
display(bits1);
console.writeline();
bits1.setall(true);//setall()方法將全部的位都置為1
bits1.set(1, false);
bits1[5] = false;
bits1[7] = false;
console.writeline("顯示陣列中全部位的值
: ");
display(bits1);
console.writeline();
console.writeline("倒轉陣列中全部位的值
: ");
bits1.not();//not()方法的結果是所有的位所有翻轉過來
.假設某位是
true,
執行not()
方法的結果就是
false
display(bits1);
console.readkey();
public static void display(bitarray bits)
foreach (bool item in bits)
console.writeline(item ?1 :0);
bitarray的其它方法
:and(),or().xor(),get()演示:
//bitarray的其它方法演示
console.writeline();
bitarray bits2 = new bitarray(bits1);
bits2.set(0, true);
bits2[1] = false;//效果同
set()方法
bits2[4] = false;
console.writeline("bits2陣列中全部位的值
: ");
display(bits2);
console.writeline();
console.writeline("bits1和
bits2
陣列or
的值: ");
bits1.or(bits2);
* 使用
and(),or()
和xor()方法,
能夠合併兩個
bitarray物件
* and()方法執行二元
and,
僅僅用兩個輸入陣列的位都設定為
1,結果位才是1
* or()方法執行二元
or,僅僅要有乙個輸入陣列的位設定為
1,結果位就是1.
* xor()方法是異或操作
,僅僅有乙個輸入陣列的位設定為
1,結果位才是1
display(bits1);
console.writeline();
console.writeline("bits1陣列
get數字2的值
");
console.writeline(bits1.get(2));
console.readkey();
bitvector32結構
相比與bitarray,
它的有點事速度快
,占用空間小
,並能夠儲存小數字
.它內部用乙個
32位的整數來儲存資料
,因此僅僅能儲存
32位的位元資料.
先來看一下簡單的未操作,
常見的位操作無非就是
and,or,not.
案例:比方乙個
8位的資料
:0000 1111
我們想把第二個0
設定為1,
那麼把它和
0100 0000
進行或操作
,就得到結果
:0100 1111
還是上面的那個數:0000 1111,
我們想把 最後乙個
1設定為
0,那麼把它和
1111 1110
這個數進行與操作
,疾苦得到了結果
:0000 1110
總結:想要操作乙個位
,我們把其它位都設定成
0,把這個位設定成
1,這個數就是所謂的位掩碼
(也成位遮蔽
,msdn
裡用的是為遮蔽)
那麼假設想要開啟乙個位(
就是把這個位設定成
1):
源資料=
源資料or
位掩碼
想要關掉乙個位:
源資料=
源資料and
位掩碼取反
解釋:位掩碼取反就是非
(not)
操作:0
變1,1變0
bitvector32的位操作
了解了主要的位操作bitvector32
的理解就會簡單多了.
首先bitvector32
本質上用乙個
32位的數來表示資料
,那麼初始化
bitvector32
結構時必須指定乙個最初指
.使用者能夠傳入乙個
int或者還有乙個已經存在的
bitvector32
來構造乙個新的
bitvector32.
bitvector32的
data
屬性返回乙個
int用來表示內部資料
,假設用來顯示
bitvector32
的內容,
這個data
是沒有意義的
,由於它是十進位製化的結果
,這時候用
bitvector32
的tostring()
方就能夠返回實用的文字說明,案例
: //初始化
bitvector32,
設定低4
位為1 0x 00 00 00 00 00 00 00 0f
bitvector32 bits = new bitvector32(0xf);
//(十六進製制
)0xf等於(
二進位制)1111等於(
十進位制)15
console.writeline(bits.data);
console.writeline(bits.tostring());
接下來就是最重要的位操作了.
bitvector32結構體提供索引器
(indexer)
能夠直接通過
bool
物件操作
bitvector32結構,
索引器引數是
int,
這個int
可不睡第幾位的意思
(bitarray
中的索引器是第幾位的意思
),而是須要乙個位掩碼
(位遮蔽
),bitvector32
通過這個位掩碼來操作內部位元位.
所以,用bitvector32
索引器操作事實上就是定義好位掩碼
,接著取回資訊或者賦值就能夠了.
案例:static void main(string args)
int mask1 = 1;
//掩碼代表最後一位
,二進位制表示
:0...0001
int mask2 = 4;
//掩碼代表倒數第三位
,二進位制表示
posted @
2017-04-19 13:55
zhchoutai 閱讀(
...)
編輯收藏
程式設計第五十七天
c numeric標頭檔案中數值演算法 include iostream include numeric 數值演算法 include vector include functional include iterator include math.h using namespace std int m...
C 高階程式設計三十七天 結構比較
結構比較 陣列和元組都實現介面istructuralequatable 和istructuralcomparable.這兩個介面不僅可以比較引用 還可以比較內容 這些介面都是顯示實現的 所以在使用時需要把陣列和元組強制轉換為這個介面 istructuralequatable 介面用於比較兩個元組或陣...
java學習之路 第五十七天
回顧 servlet生命週期 正課 cookie 一 狀態管理 瀏覽器和伺服器互動的時候,有時候需要判斷是否是同乙個使用者傳送的請求。這個時候就需要對資料進行處理。狀態就是資料,管理就是對資料的乙個操作 1.cookie 將資料儲存在客戶端 2.session 將資料儲存在服務端 二 cookie ...