【发布时间】:2010-10-22 18:44:03
【问题描述】:
Apple 有时会在其 enum 定义中使用 Bitwise-Shift 运算符。例如,在 Core Graphics 的 CGDirectDisplay.h 文件中:
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;
为什么不简单地在“普通”枚举中使用递增的int?
【问题讨论】:
-
这很容易看出枚举都是只设置了一个位的标志。
-
实际上 Loki 指出的真正原因是为了可读性。你可以使用 1, 2, 4, 8, 16 等等(2 的幂),但是你冒着犯错的风险,而 1
标签: c enums bitwise-operators bit-shift