2010-12-15 17 views

cevap

7
Int32 number = 10; 

var array = Convert.ToString(number, 2).Select(s => s.Equals('1')).ToArray(); 

--Edit--

kullanılarak yapılan uzatma yöntemi:

public static class Int32Extensions 
{ 
    public static Boolean[] ToBooleanArray(this Int32 i) 
    { 
     return Convert.ToString(i, 2 /*for binary*/).Select(s => s.Equals('1')).ToArray(); 
    } 
} 

Kullanım:

var boolArray = number.ToBooleanArray(); 
+0

güzel ve temiz bir çözüm :) –

+0

+1, Çok şık bir çözüm. – jlafay

+3

Bunun, baştaki tüm sıfırları kırpacağını unutmamak gerekir. Bool dizilimin ön ucunu 32 olana kadar doldurmak zorunda kaldım. – captncraig

7

Sen BitArray kullanabilirsiniz.

var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray(); 
+0

'yeni int [yourInt]' olmalıdır yeni int 'yourInt' 255 ise [] {yourInt} ' –

+0

, bu sekiz uzunluğunda bir dizi oluşturmaz true, ya da son sekizin doğru olduğu 32 uzunluğa sahip bir dizi ile, 8160 uzunluğunda bir false dolu bir dizi yaratacaktır. – Guffa

+0

@Guffa: Kodda bir hata var. @Albin Sunnanbo yorumuna bakın. Eğer Albin'in yorumuna gidersek, o zaman dizi büyüklüğü 32'dir. – dhinesh

12

bir intBitVector32 (veyaiçin güzel haritalandırmalıdır)

 int i = 4; 
     var bv = new BitVector32(i); 
     bool x = bv[0], y = bv[1], z = bv[2]; // example access via indexer 

Ancak, şahsen ben sadece >> vs) (vardiya kullanın ve bir int olarak tutmak istiyorum. bool[] olacağını çok daha büyük

+2

BitVector ...çerçevenin içindeki bütün sınıfları asla bilemezsiniz ... teşekkürler :) –

0

Sen BitArray kolayca bir dizi boole koleksiyonu almak için kullanabilirsiniz: Ancak

var b = new BitArray(new int[] { 255 }); 

, bu değer tüm bitleri kullanacak, bu nedenle yukarıdaki BitArray'u, 32 bit int veri türü olarak alacaksınız.

Her byte dan size sekiz boole verecekti, bayt bir BitArray oluşturabilirsiniz:

bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray(); 
:

var b = new BitArray(new byte[] { 255 }); 

Sen lider FALSEs atlayarak yalnızca önemli bit ile bir dizi alabilirsiniz

+0

@jlafay: Evet, haklısın, onu düzelttim. Lider falses fikrini atlamak için – Guffa

+0

+1. –

0

Bunu iki adımlı bir işlem olarak yapabilirsiniz, önce tamsayıyı Convert.ToString kullanarak bir ikili (temel 2) dize gösterimine dönüştürün ve ardından BitArray doldurmak için bu dize üzerinde yineleyin. Örneğin

:

int someInt = 7; 
string binaryString = Convert.ToString(someInt, 2); 
BitArray bitArray = new BitArray(binaryString.Length); 
for (int i = 0; i < bitArray.Length; i++) 
{ 
    bitArray[i] = (binaryString[i] == '1'); 
} 
+0

'BitArray', bir dizi tamsayı alan bir kurucuya sahiptir. –

İlgili konular