【问题标题】:enum default values understanding枚举默认值理解
【发布时间】:2012-02-08 11:39:39
【问题描述】:

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

我在文档中发现枚举具有这样的默认值:“1

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

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

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

谢谢

【问题讨论】:

    标签: objective-c enums


    【解决方案1】:

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

    左移运算符“

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

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

    NSInteger fooIntValue = UIDataDetectorTypePhoneNumber | UIDataDetectorTypeLink;
    

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

    【讨论】:

      【解决方案2】:

      这个

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2015-08-22
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多