C 高階程式設計五十七天 位陣列

2021-09-07 10:41:27 字數 4562 閱讀 6499

位陣列

假設須要處理非常多位,

就能夠使用

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 ...