Apple a veces usa el operador Bitwise-Shift en sus enumeración de definiciones. Por ejemplo, en el archivo CGDirectDisplay.h que forma parte del núcleo de gráficos:¿Por qué usar el operador Bitwise-Shift para valores en una definición de C enum?
enum {
kCGDisplayBeginConfigurationFlag = (1 << 0),
kCGDisplayMovedFlag = (1 << 1),
kCGDisplaySetMainFlag = (1 << 2),
kCGDisplaySetModeFlag = (1 << 3),
kCGDisplayAddFlag = (1 << 4),
kCGDisplayRemoveFlag = (1 << 5),
kCGDisplayEnabledFlag = (1 << 8),
kCGDisplayDisabledFlag = (1 << 9),
kCGDisplayMirrorFlag = (1 << 10),
kCGDisplayUnMirrorFlag = (1 << 11),
kCGDisplayDesktopShapeChangedFlag = (1 << 12)
};
typedef uint32_t CGDisplayChangeSummaryFlags;
Por qué no usar simplemente incrementando int 's como en una 'normal' enumeración?
Pregunta relacionada: http://stackoverflow.com/questions/2159138/c-bitwise-operator-in-enum-custom-authorization-in-mvc – Oded
Hace que sea fácil ver que la enumeración son todos indicadores con solo un solo bit establecido. –
En realidad, la verdadera razón, como señaló Loki, es la legibilidad. Puede usar 1, 2, 4, 8, 16 y así sucesivamente (potencias de 2) pero corre el riesgo de cometer errores, mientras que 1 << 0, 1 << 1, 1 << 2, 1 << 3 es más fácil para ingresar y leer y dejar que el compilador realice el cálculo del valor real. Si desea programar de modo inteligente, necesita saber qué puede hacer el compilador por usted y aprovechar sus capacidades. – Telemat