2012-04-22 75 views
3

所以在我的我的travelings我已经看到alwasys枚举定义这样之间是什么这两个枚举

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 << 11UL << 1之间的区别是什么

回答

5

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

+0

啊,所以他们这样做是因为NSUInteger是unsigned long的typdef。这使感官。谢谢。在7分钟内,当它允许我接受你的anser时:)你的回答太快。 – endy 2012-04-22 17:46:18

1

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

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

1

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

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

5

1 << 11UL << 1没有什么区别,但有可以1 << 331UL << 33之间的差异。根据平台,unsigned long可能会比int大,因此如果enum有大量值,则int可能并不安全。