如果需要處理的數字有許多位,就可以使用bitarray類和bitvector32結構。bitarray類位於system.collection,bitvector32結構位於system.collection.specialized。
這兩種型別最重要的區別是,bitarray類可以重新設定大小,如果事先不知道需要的位數,就可以使用bitarray類。bitvector32結構是基於棧的,因此比較快。bitvector32結構僅包含32位,它們儲存在乙個整數中。
bitarray類是乙個引用型別,它包含乙個int陣列,其中每32位使用乙個新整數。
示例: static void bitarraydemo()
static void displaybits(bitarray bits)
}如果事先知道需要的位數,就可以使用bitvector32結構代替bitarry類。bitvector32結構效率較高,因為它是乙個值型別,在整數棧上儲存位。乙個整數可以儲存32位。如果需要更多的位,可以使用多個bitvector32值或bitarray類。
//對createmask方法的第乙個呼叫來訪問第一位的乙個掩碼
//呼叫createmask後,bit1被設定為1。再次呼叫createmask方法,把第乙個掩碼作為引數傳遞給createmask方法,返回來第二位的乙個掩碼(是2)
var bits1 = new bitvector32();
int bit1 = bitvector32.createmask(); //1
int bit2 = bitvector32.createmask(bit1); //2
int bit3 = bitvector32.createmask(bit2); //4
int bit4 = bitvector32.createmask(bit3); //8
int bit5 = bitvector32.createmask(bit4); //16
bits1[bit1] = true;
bits1[bit2] = false;
bits1[bit3] = true;
程式設計客棧 bits1[bit4] = true;
console.writeline(bits1);
輸出: //除了用createmask方法建立掩碼之外,還可以自己定義掩碼,也可以一次設定多位。
//十六進製制abcdef與二進位制1010 1011 1100 1101 1110 1111相同
bits1[0xabcdef] = true;
console.writeline(bits1);
輸出: //也可以把32位分別放在不同的片段中
bits1[0xabcdef] = true;
console.writeline(bits1);
int received = 0x79abcdef;
var bits2 = new bitvector32(received);
console.writeline(bits2);
//建立6個片段。第乙個片段需要12位,有16進製制0xfff定義。
//第一次呼叫createsection方法直接受0xfff,為最前面的12位分配記憶體。
//第二次呼叫createsection方法,將第乙個片段和偏移量傳遞
bitvector32.sect程式設計客棧ion sectiona = bitvector32.createsection(0xfff);
bitvector32.section sectionb = bitvector32.createsection(0xff, sectiona);
bitvector32.section sectionc = bitvector32.createsection(0xf, sectionb);
bitvector32.section sectiond = bitvector32.createsection(0x7, sectionc);
bitvector32.section sectione = bitvector32.createsection(0x7, sectiond);
bitvector32.section sectionf = bitvector32.createsection(0x3程式設計客棧, sectione);
//bits2[sectiona],把乙個bitvector32.section型別的值傳遞給bitvector32結構的索引器,會返回乙個int。inttobinarystring方法將這個int表示
console.writeline("section a: " + inttobinarystring(bits2[sectiona], true));
console.writeline("section b: " + inttobinarystring(bits2[sectionb], true));
console.writeline("section c: " + inttobinarystring(bits2[sectionc], true));
console.writel程式設計客棧ine("section d: " + inttobinarystring(bits2[sectiond], true));
console.writeline("section e: " + inttobinarystring(bits2[sectione], true));
console.writeline("section f: " + inttobinarystring(bits2[sectionf], true));
static string inttobinarystring(int bits, bool removetrailingzero)
else
bits = bits << 1;
}string s = sb.tostring();
if (removetrailingzero)
return s.trimstart('0');
else
return s;
}本文標題: c#集合之位陣列的用法
本文位址:
C 之sort 函式用法集合
defined in header 對陣列或容器內區間 first,last 中的元素進行特定的排序 template class randomit void sort randomit first,randomit last template class randomit constexpr vo...
C 實現位陣列
當我們遇到大量整數排序時候為了節省記憶體空間我們能夠考慮使用bit陣列來實現,缺點是其僅僅適用於正整數。思想 在32位系統乙個int型別佔4個位元組,按位來計算乙個int型別能夠記錄32個數。因此,採用int型陣列和移位來實現相關功能。c 實現bit陣列 includeusing namespace...
C 集合ArrayList的用法
當我們存資料的時候,不知道放什麼型別的,也不知道放多少個,那麼就有了集合這個東西。它的用法就是 add方法 arraylist array new arraylist array.add 10 array.add 女 array.add 78.9 把陣列新增到集合中的方法 add int nums ...