2010-09-03 54 views
4

你好另一個簡單的問題。我注意到,在蘋果公司的框架某些類型定義使用符號"<<"誰能告訴我這是什麼意思?:iPhone SDK <<意思?

 

enum { 
    UIViewAutoresizingNone     = 0, 
    UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 
    UIViewAutoresizingFlexibleWidth  = 1 << 1, 
    UIViewAutoresizingFlexibleRightMargin = 1 << 2, 
    UIViewAutoresizingFlexibleTopMargin = 1 << 3, 
    UIViewAutoresizingFlexibleHeight  = 1 << 4, 
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5 
}; 
typedef NSUInteger UIViewAutoresizing; 

 

編輯:好了,所以我現在明白如何以及爲什麼你會使用左位移位,我的下一個問題是,我將如何測試以查看該值是否具有某個特徵,並且如果/ then語句或開關/大小寫方法?

回答

7

這是創建常量,這將是容易混合的方式。例如,你可以有一個API命令的冰淇淋,你可以選擇任何香草,巧克力和草莓口味的。你可以使用布爾值,但是這是一個有點沉重:

- (void) iceCreamWithVanilla: (BOOL) v chocolate: (BOOL) ch strawerry: (BOOL) st; 

一個好的技巧來解決,這是用數字,在那裏你可以使用簡單的添加混合的味道。比方說,1香草,2巧克力和4草莓:

- (void) iceCreamWithFlavours: (NSUInteger) flavours; 

現在,如果數量都有其最右邊的位集,它有它的香草味,另一位代表的巧克力,並從右側的第三位草莓。例如香草+巧克力將是1 + 2 = 3的十進制(二進制011)。

位移運算符x << y取左邊的數字(x)並移位其位y次。這是創建數字常量的好工具:

1 << 0 = 001 // vanilla 
1 << 1 = 010 // chocolate 
1 << 2 = 100 // strawberry 

瞧!現在,當您想要靈活的左邊距和靈活的右邊距視圖時,可以按位或:FlexibleRightMargin | FlexibleLeftMargin1<<2 | 1<<0100 | 001101混合標誌。在接收端,該方法可以使用邏輯屏蔽有趣的位:

// 101 & 100 = 100 or 4 decimal, which boolifies as YES 
BOOL flexiRight = givenNumber & FlexibleRightMargin; 

希望有所幫助。

0

按位左移。欲瞭解更多信息,請參閱the Wikipedia article

+0

林不知道這是什麼意思。你能解釋一下嗎? – 2010-09-03 11:28:22

+0

更多解釋鏈接(更新原始答案與維基百科鏈接): http://msdn.microsoft.com/en-us/library/f96c63ed.aspx http://www.cprogramming.com/tutorial/ bitwise_operators.html – SteamTrout 2010-09-03 11:30:04

1

它是一種bit shift

在C風格的語言,左,右 移位運算符分別爲 「< <」 和 「>>」。的 地方到移位數被給定爲第二 參數傳遞給移位運算符。

4

的< <意味着在上左側上的表達式中的所有比特被左移量在運算符右側

所以1 < < 1表示: 0001變爲0010(這些是二進制數)

另一個例子: < 2 = 0101 0000

大部分左邊的時間移位等於乘以2.
例外: 當設置了高位並將它們左移(以16位整數1000 0000 0000 0000 < < 1)時,它們將被丟棄或纏繞(i不知道它是如何在每種語言完成)

1

位移!!!

例如

500 >> 4 = 31,

Original: 111110100 
1st Shift:011111010 
2nd Shift:001111101 
3rd Shift:000111110 
4th Shift:000011111 which equals 31. 

一十六分之五百= 31

2分之500^ 4 = 31