所以在我的旅行中,我看到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 << 1
和1UL << 1
答案 0 :(得分:5)
在C ++中,UL
只意味着文字是unsigned long
整数类型。默认的整数文字是int
。
答案 1 :(得分:5)
1 << 1
和1UL << 1
之间没有区别,但可以是1 << 33
和1UL << 33
之间的差异。根据平台而言,unsigned long
可能会超过int
,因此如果enum
包含大量值,则int
可能无法安全使用。
答案 2 :(得分:1)
实际上,您的代码没有区别。
第一个1
的类型为int
,第二个1UL
的类型为unsigned long
。
答案 3 :(得分:1)
代码的工作原理相同,没有实际区别。
但是,第一个代码中1
的类型为int
,而第二个代码中的1UL
类型为unsigned long
。