【发布时间】:2013-08-03 22:11:47
【问题描述】:
我正在阅读NSCalendar 的文档,出于好奇,我更深入地研究了CFCalendarUnit,我看到了这个:
typedef enum {
kCFCalendarUnitEra = (1 << 1),
kCFCalendarUnitYear = (1 << 2),
kCFCalendarUnitMonth = (1 << 3),
kCFCalendarUnitDay = (1 << 4),
kCFCalendarUnitHour = (1 << 5),
kCFCalendarUnitMinute = (1 << 6),
kCFCalendarUnitSecond = (1 << 7),
kCFCalendarUnitWeek = (1 << 8),
kCFCalendarUnitWeekday = (1 << 9),
kCFCalendarUnitWeekdayOrdinal = (1 << 10),
kCFCalendarUnitQuarter = (1UL << 11),
kCFCalendarUnitWeekOfMonth = (1UL << 12),
kCFCalendarUnitWeekOfYear = (1UL << 13),
kCFCalendarUnitYearForWeekOfYear = (1UL << 14),
} CFCalendarUnit;
我是这样使用的:
NSUInteger preservedComponents = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
它返回124
所以我尝试这样做:
NSUInteger preservedComponents = NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
我得到30。
我想不通。它是如何工作的?
【问题讨论】:
-
2+3+8+16 = 30. 2 + 4 + 8 + 16 + 32 + 64 = 124。你的问题到底是什么?自然地,按位或操作数恰好等价于 +,因为每个操作数中始终只有一个唯一的位。
-
是的,在你下面有很多人回答之前。只是要清楚... 2+3+8+16 不是 30... 2+4+8+16 是。
-
是的,当然,我的意思是写2+4+8...
标签: c++ ios objective-c enums typedef