2012-02-08 104 views
1

我使用的Objective-C开发iOS应用程序枚举默认值理解

我在枚举有默认值这样的单证发现:“1 < < 0”

我不明白这一点默认值 例如:

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

那么,究竟是什么在此枚举每个元素的默认值?

感谢

回答

4

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

左移操作符'< <'的位移是二进制数的左边或最高位的位移位。计算一个“* 2”(两次)操作是一样的。

例如,在你已经在你的问题,第一个值,UIDataDetectorTypePhoneNumber发送枚举,为1。第二个,UIDataDetectorTypeLink,为2,第三个,UIDataDetectorTypeAddress,为4

你把那值作为标志来设置同一整数中的某些不同位:

NSInteger fooIntValue = UIDataDetectorTypePhoneNumber | UIDataDetectorTypeLink; 

As'|'操作是按位进行的,结果将是一个二进制值... 0011,即3.你指出你的变量fooIntValue有两个标志为两个不同的属性设置为true。

2

这< <符号是用于比特左移(乘以2)。

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

通常,如果你不ASIGN任何值,编译器将定义第一值为0,第二为1,等等。如果您愿意,您可以自己分配值(您所指的赋值通常用于位掩码,其中字节或字中的每个位都有其自己的含义)。

+0

非常感谢 – yasserislam 2012-02-08 13:09:40