2010-03-19 13 views

Respuesta

11

Se puede recorrer fácilmente sobre ellos utilizando operadores de bits:

char c = 'C'; 
for (int i = 0; i < 8; ++i) 
{ 
    // extract the i-th bit 
    int b = ((c & 1<<i) >> i); 
    // b will be 1 if i-th bit is set, 0 otherwise 

    // do whatever you want with b 
} 

se puede optimizarlo (como se sugiere en los comentarios):

int b = ((c >> i) & 1); 
+2

Me gustaría ir con (c >> i) & 1 – Jimmy

+1

Caray, muchachos, cuando la pregunta parece MISMO como la tarea, no den el código ... ¡Solo un pequeño empujón en la dirección correcta! –

+1

Cept del perfil de OP, está bastante claro que él no es un estudiante. –

2

Un carácter tiene un valor entero. Algo como esto va a funcionar:

int myChar = 42; 
String binstr = Integer.toBinaryString(myChar); 

El resto lo dejaré a usted como un ejercicio - pero todo lo que tiene que hacer ahora es iterar sobre la representación de cadena del valor binario y hacer lo que fuera que lo planeado en hacer.

+1

Las operaciones bit a bit son más rápidos y probablemente la mejor respuesta. La solución anterior es probablemente más simple de leer. –

2

sólo tiene que utilizar los controles a nivel de bit en cada posición que le interesan. Algo como lo siguiente creará una matriz bits que contiene los valores individuales.

char c = 'C'; 
int[] bits = new int[8]; 

int j = 0; 
for(int i = 1; i <= 256; i *= 2){ 
    bits[j++] = (c & i) > 0 ? 1 : 0; 
} 
+0

¿Podría "i * = 2" cambiarse a "i << 1", me pregunto? –

+1

@Jeff, claro, pero tal como está, esta es una respuesta decente, correcta y legible. Tal pendantry no debe merecer un downvote. –

+0

No he votado. En realidad, voté y envié una versión desenrollada de la tuya. La persona debe explicar los votos a la baja. –

0

Vas a tener que hacer esto con operaciones bit a bit:

es decir:

while (my_char > 0) { 
    if my_char & 1 
    char_vector.push 1 // if the right most bit is 1 
    else 
    char_vector.push 0 // right most bit must be 0 if we fell through to the else 
    my_char = my_char >> 1 // right shift one position 
} 

si es necesario, se puede rellenar el char_vector con los 0s restantes, después de desplazamiento a la derecha a cero.

+0

Esto no me parece Java: -/ –

+0

Perdone el pseudocódigo tipo c. ;) ¿No tiene sentido o solo mencionas que no escribí el código sintácticamente correcto? (que por supuesto, no tenía la intención) –

0
char c = 'C'; 
Vector<Boolean> vector = new Vector<Boolean>(16); 
for (int i = Character.SIZE-1; i >=0; --i) { 
    int num = c >> i; 
    boolean set = (num & 1) == 1; 
    vector.add(Boolean.valueOf(set)); 
} 
0

bucle desenrollado:

int[] bits = new int[8] 
bits[0] = (c & 1) > 0 ? 1 : 0; 
bits[1] = (c & 2) > 0 ? 1 : 0; 
bits[2] = (c & 4) > 0 ? 1 : 0; 
bits[3] = (c & 8) > 0 ? 1 : 0; 
bits[4] = (c & 16) > 0 ? 1 : 0; 
bits[5] = (c & 32) > 0 ? 1 : 0; 
bits[6] = (c & 64) > 0 ? 1 : 0; 
bits[7] = (c & 128) > 0 ? 1 : 0;