&&
邏輯與運(yùn)算
eg:(a&&b )
a = 1 , b = 1 表達(dá)式 值則為1 (這里面的1(非0)表示true 怜瞒, 0 則為true)
a = 0, b = 1 表達(dá)式則為0
類(lèi)比數(shù)學(xué)的話夜焦,就是高中數(shù)學(xué)里面的 ‘與’
&
按位與
eg:(a&b)
a = 9 , b = 8 轉(zhuǎn)換為二進(jìn)制
a = b + 1 (1001) , b = 1000 (a & b) = 1000 => 8(十進(jìn)制) 所以值判斷為非0
<<
代表二進(jìn)制情況下左移
eg:
1 << 0 , 0001 =>(左移0) 0001(十進(jìn)制1)
1 << 1 , 0001 =>(左移1)0010 (十進(jìn)制的2)
1 << 2 , 0001 => (左移2)0100(十進(jìn)制4)
|
和 ||
|
按位或
a | b
a = 8 (1000), b = 9(1001) => 1001(9)
||
邏輯或
a || b
類(lèi)比高中數(shù)學(xué)里面講的 (或)
應(yīng)用:(針對(duì)iOS的)
枚舉時(shí):
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:恰當(dāng)?shù)谋磉_(dá)了每一種情況的的唯一性
使用時(shí):
個(gè)人認(rèn)為使用的環(huán)境應(yīng)為搏予,同一個(gè)對(duì)象点把,有處理多個(gè)處于平行的關(guān)系的業(yè)務(wù)邏輯的能力,并且他們幾個(gè)互相沒(méi)有順序的影響幌衣。如果有邏輯上的先后順序寺擂,也可以通過(guò)if的順序來(lái)解決。不過(guò)第二種情況個(gè)人不贊成使用泼掠。
UIRectEdge type = UIRectEdgeAll
if (type & UIRectEdgeTop) {
// UIRectEdgeTop 類(lèi)型
}
UIRectEdge type = UIRectEdgeTop
if (type & UIRectEdgeTop) {
// UIRectEdgeTop 類(lèi)型
}
if (type & UIRectEdgeBottom) {
//0001 & 0100 始終進(jìn)不來(lái)
}
綜上所述:
NS_option 一般情況下 和 ‘&’ 按位與搭配使用
關(guān)于效率問(wèn)題 的取舍
&& 和 &
a&&b:我們一般情況下如果a為假 怔软, 那么我們就不去判斷b了
a&b :a為假 我們還會(huì)去和b 進(jìn)行比較 , 效率就稍微降低了择镇。
不過(guò) 和業(yè)務(wù)邏輯 挡逼,還有有時(shí)候簡(jiǎn)化代碼的情況相比較這些效率也算不了多少∧逋悖看情況使用就好了家坎。
至于 || 和 | 的問(wèn)題同上