枚举默认值理解



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

我在文档中发现enum有这样的默认值:"1<<0"

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

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

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

感谢

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

左移运算符'<lt;'是二进制数向左或最有效侧的位的位移。这与计算"*2"(乘以2)运算相同。

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

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

NSInteger fooIntValue = UIDataDetectorTypePhoneNumber | UIDataDetectorTypeLink;

由于"|"操作是按位进行的,因此结果将是二进制值。。。0011,即3。您指示您的变量fooIntValue有两个针对两个不同属性设置为true的标志。

这<lt;符号用于向左移位位(乘以2)。

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

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

最新更新