这两个枚举有什么区别

end*_*ndy 3 enums bit-manipulation objective-c

所以在我的旅行中,我看到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)
};
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚看了NSJSONSerilization类,遇到了这样定义的枚举

enum {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves     = (1UL << 1),
    NSJSONReadingAllowFragments    = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是做了UL什么.1 << 1和之间有什么区别1UL << 1

jua*_*nza 5

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


Luc*_*ore 5

有没有什么区别1 << 11UL << 1,但也有可能是之间的差异1 << 331UL << 33.取决于平台,并且unsigned long可以变得比一个大int,所以如果enum有很多值,int可能不安全使用.