这两个枚举有什么区别

时间:2012-04-22 17:39:21

标签: objective-c enums bit-manipulation

所以在我的旅行中,我看到enums的定义是这样的(当需要位图时)

enum {
    UIControlStateNormal       = 0,                       
    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
    UIControlStateDisabled     = 1 << 1,
    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
};

但是,我刚刚看了NSJSONSerilization类,遇到了一个定义为enum的枚举

enum {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves     = (1UL << 1),
    NSJSONReadingAllowFragments    = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;

所以我猜我的问题是UL做了什么。 1 << 11UL << 1

之间有什么区别?

4 个答案:

答案 0 :(得分:5)

在C ++中,UL只意味着文字是unsigned long整数类型。默认的整数文字是int

答案 1 :(得分:5)

1 << 11UL << 1之间没有区别,但可以1 << 331UL << 33之间的差异。根据平台而言,unsigned long可能会超过int,因此如果enum包含大量值,则int可能无法安全使用。

答案 2 :(得分:1)

实际上,您的代码没有区别。

第一个1的类型为int,第二个1UL的类型为unsigned long

答案 3 :(得分:1)

代码的工作原理相同,没有实际区别。

但是,第一个代码中1的类型为int,而第二个代码中的1UL类型为unsigned long