Digamos que tengo una variable int n = 8. En la mayoría de las máquinas, tendrá un valor de 32 bits. ¿Cómo puedo obtener solo los 8 bits más bajos (byte más bajo) de esto en binario? Además, ¿cómo puedo acceder a cada bit para averiguar qué es? Mi pregunta está relacionada con C¿Cómo obtengo los 8 bits más bajos de int?
Respuesta
unsigned n = 8;
unsigned low8bits = n & 0xFF;
Nota algunas cosas:
- Para operaciones bit a bit, utilice siempre los
unsigned
tipos - Los bits se pueden extraer de los números utilizando enmascaramiento binaria con la
&
operador - Para acceder a la baja 8 bits la máscara es
0xFF
porque en binario tiene sus 8 bits bajos encendidos y el resto 0 - Los 8 bits bajos del número 8 son ... 8 (pensar en ello por un momento)
Para acceder a un determinado bits de un número, dicen que el k
ésimo bit:
unsigned n = ...;
unsigned kthbit = (1 << k) & n;
Ahora, será kthbit
0 si el k
ésimo bit de n
es 0, y un número positivo (2**k
) si el k
ésimo bit de n
es 1.
Uso aritmética bit a bit para enmascarar los 8 bits más bajos:
unsigned char c = (x & 0xFF);
Para acceder a la n-ésima bit más bajo, la ecuación es (x & (1 << n))
(n de cero indica el bit menos significativo) . Un resultado de cero indica que el bit es claro, y distinto de cero indica que el bit está configurado.
usted no puede est si un bit particular se encuentra en un número utilizando < < y &, es decir:
if (num & (1<<3)) ...
pondrá a prueba si el cuarto bit está establecido o no.
Del mismo modo, puede extraer simplemente los 8 bits más bajos (como un número entero) mediante el uso de & con un número que sólo se ha fijado el 8 bits más bajos, es decir, num & 255
o num & 0xFF
(en hexadecimal).
La mejor manera es usar el operador lógico de bit & con el valor adecuado.
Así que para los 8 bits inferiores:
n & 0xFF; /* 0xFF == all the lower 8 bits set */
O como regla general:
n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */
Se puede combinar con el operador de desplazamiento de bits a ser un poco específica:
(n & (1<<3))>>3;
/* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */
- 1. Obtenga dos bytes más bajos de la variable int
- 2. encasillamiento Implícito en C (conversión de 32 bits sin signo de 8 bits a T int)
- 3. ¿Cómo se convierten los bytes de 8 bits a los caracteres de 6 bits?
- 4. Cómo reinterpretar los bits de un flotante como int
- 5. Seleccione solo los valores más bajos con Linq
- 6. Obtener la longitud de los bits utilizados en int
- 7. ¿Cómo obtengo los valores más altos de una tabla?
- 8. ¿Cómo convertir una imagen IplImage * OpenCV de 8 bits a una IplImage * de 32 bits?
- 9. Convertir profundidad de 8 bits CvMat * a 8 bits de profundidad
- 10. Bitmap.createBitmap (fuente de mapa de bits, int x, int y, int ancho, int altura) volver mapa de bits mal
- 11. ¿Cómo obtengo los comentarios más recientes de Facebook?
- 12. ¿Cómo convertir un color RGB al color de 8 bits más parecido?
- 13. muestras de audio de 8 bits a 16 bit
- 14. enum de 8 bits, en C
- 15. Conversión de int a una matriz de bits en .NET
- 16. ¿Cómo obtengo el tipo de datos de columna en Oracle con PL-SQL con privilegios bajos?
- 17. Reemplazar los guiones bajos en la cadena
- 18. conversión de Campo de Bits a int
- 19. ¿Qué hace const en los niveles más bajos de la máquina?
- 20. ¿Está int en C siempre de 32 bits?
- 21. Mapa de bits a int [] usando Marshal.Copy()
- 22. Convertir imagen Bayer de 12 bits a RGB de 8 bits usando OpenCV
- 23. En C++, ¿cómo obtengo un índice int de un iterador?
- 24. ¿Cómo obtengo la lista de identificadores como int usando LINQ
- 25. ¿Cambio de bits eficiente una variedad de int?
- 26. Cartas, números, guiones bajos y guiones bajos Regex
- 27. cómo convertir un int a una máscara de bits?
- 28. ¿Cuáles son las aplicaciones prácticas de los algoritmos ancestrales comunes más bajos?
- 29. Bits más probables en entero al azar
- 30. Ejecutando un proceso con los privilegios más bajos posibles en winapi
¿significa el primer bit '0 ° bit o' 1 ° bit? –