2012-04-22 74 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可能並不安全。