3

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

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 {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves     = (1UL << 1),
    NSJSONReadingAllowFragments    = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;

所以我想我的问题是做UL什么。1 << 1和有什么区别1UL << 1

4

4 回答 4

5

在 C++ 中,UL仅表示字面量是unsigned long整数类型。默认整数文字是int.

于 2012-04-22T17:40:48.230 回答
5

1 << 1和之间没有区别1UL << 1,但和之间可以有区别。取决于平台,并且可以大于 an ,因此如果有很多值, an可能不安全使用。1 << 331UL << 33unsigned longintenumint

于 2012-04-22T17:46:20.157 回答
1

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

1一个中的类型是,第二个中int的类型是。1ULunsigned long

于 2012-04-22T17:42:44.733 回答
1

代码将相同,没有真正的区别。

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

于 2012-04-22T17:45:27.893 回答