probablemente esté familiarizado con el esquema enum
máscara de bits, como:if (máscara y VALOR) o si ((máscara y VALOR) == VALOR)?
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
he visto una gran cantidad de código que luego pruebas para un determinado bit de la máscara como
if ((mask & FLAG3) == FLAG3)
Pero ISN ¿Es eso equivalente a esto?
if (mask & FLAG3)
¿Hay alguna razón para usar la primera versión? En mi opinión, la segunda versión más corta es más legible.
¿Quizás los hábitos residuales de los programadores de C que piensan que los valores verdaderos deben convertirse a 1
? (Aunque incluso allí, la versión más larga tiene más sentido en una asignación o return
comunicado que en una prueba de sentencia condicional.)
Ahora hazlo con máscara y ALL_FLAGS. Ya no es lo mismo. –
'==' tiene mayor prioridad que '&', por lo que necesita paréntesis en su condición: 'if ((máscara & FLAG3) == FLAG3)'. – casablanca