枚举默认值理解

时间:2012-02-08 11:39:39

标签: objective-c enums

我正在使用objective-c来开发ios应用程序

我在文档中发现枚举的默认值如下:" 1<< 0"

我不明白这个默认值 例如:

enum {
    UIDataDetectorTypePhoneNumber   = 1 << 0,
    UIDataDetectorTypeLink          = 1 << 1,
    UIDataDetectorTypeAddress       = 1 << 2,
    UIDataDetectorTypeCalendarEvent = 1 << 3,
    UIDataDetectorTypeNone          = 0,
    UIDataDetectorTypeAll           = NSUIntegerMax
};

那么,这个枚举中每个元素的默认值是什么?

感谢

2 个答案:

答案 0 :(得分:4)

这是一个带有按位值或位标志的枚举。每个值都是一个二进制值,其中只有一位设置为1而所有其他值都设置为0.这样,您可以将一个值存储为整数的位数。

左移操作员'&lt;&lt;'是二进制数的左侧或最重要侧的位移位。计算“* 2”(第二次)操作是一样的。

例如,在您发送问题的枚举中,第一个值UIDataDetectorTypePhoneNumber为1.第二个值UIDataDetectorTypeLink为2,第三个值UIDataDetectorTypeAddress为4.

将这些值组合为标志,以便在同一整数中设置一些不同的位:

NSInteger fooIntValue = UIDataDetectorTypePhoneNumber | UIDataDetectorTypeLink;

作为'|'按位操作,结果将是二进制值... 0011,即3.并且您指示您的变量fooIntValue有两个标志设置为true,用于两个不同的属性。

答案 1 :(得分:2)

这&lt;&lt; sign用于向左移位(乘以2)。

1 << 0 equals 1 (0b00000001)
1 << 1 equals 2 (0b00000010)
1 << 2 equals 4 (0b00000100)

通常,如果你没有任何值,编译器会将第一个值定义为0,第二个定义为1,依此类推。如果您愿意,您可以自己分配值(您所引用的赋值通常用于位掩码,其中字节或单词中的每个位都有自己的含义)。