&& 和 & 的區(qū)別 , | 和 || 的區(qū)別

&&

邏輯與運算
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ù)邏輯 ,還有有時候簡化代碼的情況相比較這些效率也算不了多少。看情況使用就好了。

至于 || 和 | 的問題同上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 新年過后,一幫兄弟整天聚在一起打牌,泡吧。 大家都單身多年,最初還結(jié)成聯(lián)盟,創(chuàng)造各種機會互相幫著勾搭各種妹子,也算...
    我想你也在想閱讀 640評論 1 4
  • 明樂家塾第二天,在林兒和妞妞身上發(fā)生的一件事。 這件當時發(fā)生的事,姬老師拿到了課堂,我們一起看這些事背后的規(guī)律和真...
    i韓小魚閱讀 603評論 0 11
  • 別看有些人表面風風光光的,背地里也是一副惹人嫌的模樣。 今天去電視臺參加了節(jié)目的錄制,也是挺奇特的體驗。首先是節(jié)目...
    蟒蛇與小莓閱讀 570評論 0 0
  • 是時候放慢自己的腳步! 作者:馮永紅 時光匆匆,放慢腳步,讓自己仰頭看看漂浮著閑云的天空。流水曦曦,放慢腳步,俯...
    永紅語錄閱讀 302評論 0 0