Suponiendo que tengo el carácter "C" cuyo código ascii es 0110 0111
. ¿Cómo puedo iterar sobre sus bits? Me gustaría construir un vector a partir de estos 1 y 0 ...Iteración de bits de un char
Respuesta
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);
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.
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. –
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;
}
¿Podría "i * = 2" cambiarse a "i << 1", me pregunto? –
@Jeff, claro, pero tal como está, esta es una respuesta decente, correcta y legible. Tal pendantry no debe merecer un downvote. –
No he votado. En realidad, voté y envié una versión desenrollada de la tuya. La persona debe explicar los votos a la baja. –
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.
Esto no me parece Java: -/ –
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) –
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));
}
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;
- 1. Obtener el número de bits en el char
- 2. iteración a través de un impulso :: dynamic_bitset
- 3. Iteración de un contenedor cambiante
- 4. Reemplazar números de char después de un char específico
- 5. Cómo cambiar 4 bits en char sin signo?
- 6. Sustitución de un rango de bits
- 7. char! = (Char firmado), char! = (Char no firmado)
- 8. Iteración sobre las líneas de un archivo
- 9. Vuelva a ejecutar un bucle de iteración
- 10. Iteración sobre un contenedor de unique_ptr's
- 11. Java iteración sobre un conjunto de claves
- 12. ¿Roles/permisos de iteración?
- 13. Iteración de colores
- 14. Variables miembro de iteración
- 15. F # iteración sobre un diccionario
- 16. PyMongo - iteración de cursor
- 17. índice de iteración lenguaje
- 18. Por qué el resultado de char sin signo << char sin signo no está sin signo char
- 19. Conversión implícita de char ** a const char **
- 20. Asignación de memoria char * y char []
- 21. C++ de unsigned char * a const char *
- 22. iteración de array de msbuild
- 23. Lectura en 16 bits de un registro de 32 bits
- 24. Orden de iteración de HashSet
- 25. Char Matriz VS Char *
- 26. Continuar una iteración en C++ hasta un número de iteración específico en gdb
- 27. ¿Por qué un BOOL es un char firmado?
- 28. advertencia cuando se utiliza con el campo de bits unsigned char
- 29. Impresión de un char con printf
- 30. Iteración de matrices por reflexión
Me gustaría ir con (c >> i) & 1 – Jimmy
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! –
Cept del perfil de OP, está bastante claro que él no es un estudiante. –