&&
邏輯與運算
eg:(a&&b )
a = 1 , b = 1 表達式 值則為1 (這里面的1(非0)表示true , 0 則為true)
a = 0, b = 1 表達式則為0
類比數(shù)學的話,就是高中數(shù)學里面的 ‘與’
&
按位與
eg:(a&b)
a = 9 , b = 8 轉(zhuǎn)換為二進制
a = b + 1 (1001) , b = 1000 (a & b) = 1000 => 8(十進制) 所以值判斷為非0
<<
代表二進制情況下左移
eg:
1 << 0 , 0001 =>(左移0) 0001(十進制1)
1 << 1 , 0001 =>(左移1)0010 (十進制的2)
1 << 2 , 0001 => (左移2)0100(十進制4)
|
和 ||
|
按位或
a | b
a = 8 (1000), b = 9(1001) => 1001(9)
||
邏輯或
a || b
類比高中數(shù)學里面講的 (或)
應(yīng)用:(針對iOS的)
枚舉時:
typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
UIRectEdgeNone = 0, //(0000)
UIRectEdgeTop = 1 << 0,//(0001)
UIRectEdgeLeft = 1 << 1,//(0010)
UIRectEdgeBottom = 1 << 2,//(0100)
UIRectEdgeRight = 1 << 3,//(1000)
UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight //(1111)
}
description:恰當?shù)谋磉_了每一種情況的的唯一性
使用時:
個人認為使用的環(huán)境應(yīng)為,同一個對象,有處理多個處于平行的關(guān)系的業(yè)務(wù)邏輯的能力,并且他們幾個互相沒有順序的影響。如果有邏輯上的先后順序,也可以通過if的順序來解決。不過第二種情況個人不贊成使用。
UIRectEdge type = UIRectEdgeAll
if (type & UIRectEdgeTop) {
// UIRectEdgeTop 類型
}
UIRectEdge type = UIRectEdgeTop
if (type & UIRectEdgeTop) {
// UIRectEdgeTop 類型
}
if (type & UIRectEdgeBottom) {
//0001 & 0100 始終進不來
}
綜上所述:
NS_option 一般情況下 和 ‘&’ 按位與搭配使用
關(guān)于效率問題 的取舍
&& 和 &
a&&b:我們一般情況下如果a為假 , 那么我們就不去判斷b了
a&b :a為假 我們還會去和b 進行比較 , 效率就稍微降低了。
不過 和業(yè)務(wù)邏輯 ,還有有時候簡化代碼的情況相比較這些效率也算不了多少。看情況使用就好了。
至于 || 和 | 的問題同上