son rflags registro que procesador paridad los flag eflags banderas bandera objective-c cocoa enums

objective-c - rflags - registro de banderas del procesador



Cómo utilizar enumeraciones con banderas de bits (1)

Tengo una declaración de enumeración utilizando indicadores de bits y no puedo averiguar exactamente cómo usar esto

enum { kWhite = 0, kBlue = 1 << 0, kRed = 1 << 1, kYellow = 1 << 2, kBrown = 1 << 3, }; typedef char ColorType;

Supongo que almacenar varios colores en un colorType ¿ OR debería juntar los bits?

ColorType pinkColor = kWhite | kRed;

Pero supongamos que quisiera comprobar si pinkColor contiene kRed , ¿cómo haría esto?

¿Alguien se preocupa por darme un ejemplo utilizando el ejemplo de ColorType proporcionado?


Sí, use bitwise OR ( | ) para establecer varios indicadores:

ColorType pinkColor = kWhite | kRed;

Luego use AND ( & ) a nivel de bit para probar si un indicador está establecido:

if ( pinkColor & kRed ) { // do something }

El resultado de & tiene un bit establecido solo si el mismo bit se establece en ambos operandos. Como el único bit en kRed es el bit 1, el resultado será 0 si el otro operando no tiene este bit establecido también.

Si necesita saber si un indicador en particular se establece como un BOOL lugar de solo probarlo en una condición if inmediatamente, compare el resultado del bit a bit Y con el bit probado:

BOOL hasRed = ((pinkColor & kRed) == kRed);