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);