Digamos que tengo un byte como este 1010XXXX donde los valores X podrían ser cualquier cosa. Quiero establecer los cuatro bits más bajos en un patrón específico, digamos 1100, mientras que los cuatro bits superiores no se ven afectados. ¿Cómo podría hacer esto más rápido en C?¿Cómo se configuran solo ciertos bits de un byte en C sin afectar el resto?
Respuesta
Puede establecer todos esos bits en 0 por bitwise-anding con los 4 bits establecidos en 0 y todos los demás en 1 (Este es el complemento de los 4 bits establecidos en 1). A continuación, puede hacerlo en modo bit, o en bits, como lo haría normalmente.
es decir
val &= ~0xf; // Clear lower 4 bits. Note: ~0xf == 0xfffffff0
val |= lower4Bits & 0xf; // Worth anding with the 4 bits set to 1 to make sure no
// other bits are set.
En general:
value = (value & ~mask) | (newvalue & mask);
mask
es un valor con todos los bits que ser cambiado (y sólo ellos) se establece en 1 - sería 0xF en su caso. newvalue
es un valor que contiene el nuevo estado de esos bits; todos los demás bits se ignoran por completo.
Esto funcionará para todos los tipos para los que se admiten operadores bit a bit.
Utilice el operador bit a bit o | cuando se quiere cambiar el bit de un byte de 0 a 1.
operador Uso bit a bit y & cuando se quiere cambiar el bit de un byte de 1 a 0
Ejemplo
#include <stdio.h>
int byte;
int chb;
int main() {
// Change bit 2 of byte from 0 to 1
byte = 0b10101010;
chb = 0b00000100; //0 to 1 changer byte
printf("%d\n",byte); // display current status of byte
byte = byte | chb; // perform 0 to 1 single bit changing operation
printf("%d\n",byte);
// Change bit 2 of byte back from 1 to 0
chb = 0b11111011; //1 to 0 changer byte
byte = byte & chb; // perform 1 to 0 single bit changing operation
printf("%d\n",byte);
}
Tal vez hay mejores formas, no lo sé. Esto te ayudará por ahora.
- 1. Cómo sustituir bits en un campo de bits sin afectar a otros bits utilizando c
- 2. ¿Cómo obtener un solo byte de BitArray (sin byte [])?
- 3. ¿Cómo convertir un byte en bits?
- 4. Cómo invertir bits de un byte?
- 5. ¿Se producen ciertos errores de excepción solo en el depurador?
- 6. Cómo se accede a un solo byte de la memoria mediante la CPU en una memoria de 32 bits y en el procesador de 32 bits
- 7. ¿Cómo cambiar un relleno DIV sin afectar el ancho/alto?
- 8. ¿Cómo 'hg merge' sin afectar el directorio de trabajo?
- 9. ¿Cómo puedo invertir bits de un byte sin signo en Java?
- 10. VIM: Ciertos archivos .c se abren sin resaltado de sintaxis
- 11. Representación de un flotante en un solo byte
- 12. Conversión de una representación de bits en un byte
- 13. gnuplot, ¿cómo etiquetar solo ciertos puntos?
- 14. ¿Cómo cambiarías un solo byte en un archivo?
- 15. Los controles del iPod mini están deshabilitados cuando se configuran ciertos parámetros de sesión de audio
- 16. Si el byte es un número entero de 8 bits, ¿cómo podemos establecerlo en 255?
- 17. entero de 1 byte sin signo C++
- 18. Usando Python ¿Cómo puedo leer los bits en un byte?
- 19. Cómo expandir un DIV sin afectar a otros elementos
- 20. Construcción una expresión lógica que contará bits en un byte
- 21. Cómo leer un byte y guardar el valor ASCII de byte en entero en C++
- 22. reemplazar byte de 32 bits número
- 23. ¿Cómo se configuran las httpOnlyCookies en ASP.NET?
- 24. Autocablear solo ciertos argumentos de un constructor
- 25. C#, bits y bytes - ¿Cómo recupero los valores de bit de un byte?
- 26. Intercambio de par de bits en un byte
- 27. Intercambiar cada par de bits en el byte
- 28. ¿Cómo se hace el módulo o el resto en Erlang?
- 29. ASP.NET MVC: enrutamiento de babosas personalizadas sin afectar el rendimiento
- 30. Eliminar www en todo el sitio, forzar https en ciertos directorios y http en el resto?
¿Podría dar un ejemplo específico? Supongamos que tengo: n = 1024. Quiero cambiar los bits de la posición 3 a la 7 (inclusive, comenzando desde 0 con el bit menos significativo) a k = 19. El resultado debería ser: 1176. ¿Cómo puedo lograrlo? Gracias. – dh16