2012-03-14 62 views
1
public static int getIntegerFromBitArray(BitArray bitArray) 
{ 
    var result = new int[1]; 
    bitArray.CopyTo(result, 0); 
    return result[0]; 
} 

// Input A) 01110 
// Output A) 14 
// Input B) 0011 
// Output B) 12 <=== ????? WHY!!! :) 

有人可以解釋爲什麼我的第二個返回值是12而不是3?求求你了,謝謝你。BitArray到整數問題

+0

請告訴我們你是如何使用這種方法的,輸入A和B是如何構建的。 – gdoron 2012-03-14 07:37:22

回答

10

基本上它正在考慮與您期望的方式相反的位 - 您沒有顯示如何將輸入二進制映射到BitArray,但結果是將其視爲1100而不是0011。

的文檔不清晰,不可否認,但它確實工作,我倒是期望它的方式bitArray[0]代表至少顯著價值,只是因爲它通常是討論二進制文件時(所以0位是0/1,位1是0/2,位2是0/4,位3是0/8等)。例如:

using System; 
using System.Collections; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     BitArray bits = new BitArray(8); 
     bits[0] = false; 
     bits[1] = true; 

     int[] array = new int[1]; 
     bits.CopyTo(array, 0); 
     Console.WriteLine(array[0]); // Prints 2 
    } 
} 
+1

第一個輸入('01110')是對稱的,所以他沒有注意到...... ** + 1 ** – gdoron 2012-03-14 07:40:57

+0

一旦您嘗試實現像CopyTo這樣的功能,該命令實際上會非常有意義。 – Croo 2012-03-14 07:47:26

+0

非常感謝 – Grrbrr404 2012-03-14 07:50:17

1

您需要旋轉位的正確方向以獲得正確的結果。 1100是12

+1

不,旋轉不是這裏所要求的 - 它是反射。例如,如果OP的輸入是1101,那麼結果將是11(8 + 2 + 1),並且不能通過旋轉1101的位模式來獲得... – 2012-03-14 07:43:01

+0

是的,您是對的。我的意思是旋轉180;)。反射在這裏最合適。如果1101旋轉180°,我們得到1011. 11^10 = 1011^2 – gabba 2012-03-14 08:18:51

+1

不清楚你是否是輕浮的,但只是在* case *你不是,「旋轉180」通常意味着「旋轉通過180位「 - 我將永遠不會使用術語」旋轉「作爲」反射「。 – 2012-03-14 08:33:11