2010-12-15 26 views

Respuesta

7
Int32 number = 10; 

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

--Edit--

Usando método de extensión:

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

Uso:

var boolArray = number.ToBooleanArray(); 
+0

buena y limpia solución :) –

+0

+1, solución muy elegante. – jlafay

+3

Es importante tener en cuenta que esto truncará todos los ceros a la izquierda. Tuve que rellenar el frente de mi matriz bool hasta que fue de longitud 32. – captncraig

7

Puede utilizar el BitArray.

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

'new int [yourInt]' debe ser 'new int [] {yourInt}' ' –

+0

Si yourInt' es 255, no va a crear una matriz con la longitud de ocho lleno de verdadero, o incluso una matriz con la longitud de 32 donde los últimos ocho son verdaderos, creará una matriz con la longitud de 8160 que está llena de falso. – Guffa

+0

@Guffa: hay un error en el código. Vea el comentario de @Albin Sunnanbo. Si rectificamos el comentario de @ Albin, entonces el tamaño de la matriz es 32. – dhinesh

12

Un int debería asignar bien a BitVector32 (o BitArray)

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

Sin embargo, en lo personal me gustaría sólo tiene que utilizar los turnos (>> etc) y lo guarda como int. El bool[] habría mucho grande

+2

BitVector ...nunca se sabe todas las clases que están dentro del marco ... gracias :) –

0

Puede utilizar el BitArray a conseguir fácilmente una colección de booleanos de un número:

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

Sin embargo, se hará uso de todos los bits en el valor, por lo que la anterior le conseguirá una BitArray con la longitud 32 como el tipo de datos int es de 32 bits.

Se puede crear un BitArray de bytes, lo que le daría ocho booleanos de cada byte:

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

, usted puede obtener una matriz con sólo los bits significativos por la omisión de las Falsas principales:

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

@jlafay: Sí, tienes razón, lo corregí. – Guffa

+0

+1 por omitir la idea de los falsos líderes. –

0

se puede hacer esto como un proceso de dos pasos, convertir primero el número entero a una representación binaria (2 base) cadena utilizando Convert.ToString y luego iterar sobre esa cadena para rellenar un BitArray.

Por ejemplo:

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' tiene un constructor tomando una matriz de enteros. –

Cuestiones relacionadas