2010-12-14 1422 views

Respuesta

11

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. 
33

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.

+0

¿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

0

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.

Cuestiones relacionadas