Apple talvolta utilizza l'operatore Bitwise-Shift nelle definizioni enum. Ad esempio, nel CGDirectDisplay.h file di che fa parte del core grafico:Perché utilizzare l'operatore Bitwise-Shift per i valori in una definizione 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;
Perché non usare semplicemente incrementando int 's come in un "normale" enum?
Domanda correlata: http://stackoverflow.com/questions/2159138/c-bitwise-operator-in-enum-custom-authorization-in-mvc – Oded
Rende facile vedere che l'enum è tutte le bandiere con solo un singolo set. –
In realtà la vera ragione, come ha sottolineato Loki, è la leggibilità. Potresti usare 1, 2, 4, 8, 16 e così via (poteri di 2) ma corri il rischio di commettere errori mentre 1 << 0, 1 << 1, 1 << 2, 1 << 3 è più facile per digitare e leggere lasciandolo al compilatore per eseguire il calcolo del valore effettivo. Se vuoi programmare smart, devi sapere cosa può fare il compilatore per te e sfruttare le sue capacità. – Telemat