variable uso programacion metodo ejemplos ciclos banderas bandera c bit-manipulation flags

uso - ¿Cómo puedo eliminar una bandera en C?



uso de flags (3)

Es importante tener en cuenta que si la variable que se está manipulando es más grande que un int, el valor utilizado en la expresión ''y no'' también debe serlo. En realidad, a veces se puede salirse con la suya con el uso de tipos más pequeños, pero hay suficientes casos extraños de que probablemente sea mejor usar sufijos de tipo para asegurarse de que las constantes sean lo suficientemente grandes.

Hay una variable que contiene algunas banderas y quiero eliminar una de ellas. Pero no sé cómo eliminarlo.

Aquí es cómo configuro la bandera.

my.emask |= ENABLE_SHOOT;


Respuesta corta

Desea realizar una operación Y de Bit a bit en el valor actual con una operación NOT a Nivel de Bit del indicador que desea desactivar . A Bitwise NOT invierte todos los bits (es decir, 0 => 1, 1 => 0).

flags = flags & ~MASK; o flags &= ~MASK; .

Respuesta larga

ENABLE_WALK = 0 // 00000000 ENABLE_RUN = 1 // 00000001 ENABLE_SHOOT = 2 // 00000010 ENABLE_SHOOTRUN = 3 // 00000011 value = ENABLE_RUN // 00000001 value |= ENABLE_SHOOT // 00000011 or same as ENABLE_SHOOTRUN

Cuando ejecuta Bitwise AND con Bitwise NOT del valor que desea desactivar.

value = value & ~ENABLE_SHOOT // 00000001

en realidad lo estás haciendo:

0 0 0 0 0 0 1 1 (current value) & 1 1 1 1 1 1 0 1 (~ENABLE_SHOOT) --------------- 0 0 0 0 0 0 0 1 (result)


my.emask &= ~(ENABLE_SHOOT);

para borrar algunas banderas:

my.emask &= ~(ENABLE_SHOOT|SOME_OTHER|ONE_MORE);