2012-09-12 18 views
1

我想知道是否有內置的類與二進制數的工作和轉換任何數字(在這種情況下,十進制)轉換爲二進制,反之亦然。例如,如果我想檢查第三位是否爲1我可以使用&位運算符,但我覺得它會簡單得多,如果確實有方法將小數轉換爲二進制並檢查我想要的位置上的值。我搜索並找到使用BitArray的例子,但由於某種原因,它會拋出一個錯誤,它不存在,我想知道它是否過時。我也試過MS庫,發現BitConverter.GetBytes(value),但我不知道它做什麼,因爲在所有當我嘗試這是例子:如何將十進制(整數)轉換爲二進制,使用二進制,然後將其轉換回十進制C#

int value = 12345678; 
    byte[] bytes = BitConverter.GetBytes(value); 
    Console.WriteLine(BitConverter.ToString(bytes)); 

輸出是4E-61-BC-00這我不知道實際是什麼。我正在尋找的是,如果我有像int i = 247; // 11110111然後:

i[0] = 1; 
i[1] = 1; 
i[2] = 1; 
i[3] = 0; 
i[4] = 1; 
i[5] = 1; 
i[6] = 1; 
i[7] = 1; 

這樣我就可以得到1或0的任何位置。

i[2] = 1; 
+0

整數*已經*在二進制,它的時候你想要它們被轉換的十進制表示。 – harold

回答

2

嗯,是的,你可以創建一個BitArrayint

int i = 247; 
BitArray b = new BitArray(i); 

然後你就可以檢查第三位:

if (b[2]) 
{ 
    // the bit is set 
} 

BitArray元素是Boolean,所以設置第三位,你會寫:

b[2] = true; 

雖然轉換回int是有點痛苦。因爲您必須使用CopyToBitArray複製到int[],然後訪問int[]中的第一項。

我不明白你爲什麼想要經歷頭痛。這將比使用按位運算符&慢很多且更麻煩。您可以輕鬆地爲不同的比特值創建常量:

const int bit0 = 0x01; 
const int bit1 = 0x02; 
const int bit2 = 0x04; 
const int bit3 = 0x08; 
const int bit4 = 0x10; 
// etc. 

然後:

if ((i & bit2) != 0) 
{ 
    // the bit is set 
} 

設置單位:

i |= bit2; 

重置位:

i &= ~bit2; 
+0

有很多原因需要位集數據結構的抽象。考慮位向量算法(如BDD或數據流分析),並且BitArray對象支持設置操作。不過,你完全正確,因爲它不會像原生位移那麼快。 – Jduv

+0

在提出問題之前,我已經使用了按位運算符解決方案,而現在,因爲我只是在學習C#.NET,所以尋找替代方案的原因是爲了簡單起見並在.NET中查找新功能。至少對於我來說,使用'BitArray'更簡單。 – Leron

+0

@Jduv:我明白你爲什麼要抽象位集數據,但我不認爲使用單個整數時會很普遍。 –

相關問題