&& 和 & 的区别 , | 和 || 的区别

&&

逻辑与运算
eg:(a&&b )
a = 1 , b = 1  表达式 值则为1 (这里面的1(非0)表示true , 0 则为true)
a = 0, b = 1  表达式则为0
类比数学的话,就是高中数学里面的  ‘与’

&

按位与
eg:(a&b)
a = 9 , b = 8  转换为二进制
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 
类比高中数学里面讲的 (或)

应用:(针对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:恰当的表达了每一种情况的的唯一性

使用时:
个人认为使用的环境应为,同一个对象,有处理多个处于平行的关系的业务逻辑的能力,并且他们几个互相没有顺序的影响。如果有逻辑上的先后顺序,也可以通过if的顺序来解决。不过第二种情况个人不赞成使用。

UIRectEdge type =  UIRectEdgeAll
if (type & UIRectEdgeTop) {
//  UIRectEdgeTop 类型
}

UIRectEdge type =  UIRectEdgeTop
if (type & UIRectEdgeTop) {
//  UIRectEdgeTop 类型
}
if (type & UIRectEdgeBottom) {
//0001 & 0100 始终进不来 
}

综上所述:
NS_option 一般情况下 和 ‘&’ 按位与搭配使用

关于效率问题 的取舍

&&  和 & 
a&&b:我们一般情况下如果a为假 , 那么我们就不去判断b了

a&b :a为假 我们还会去和b 进行比较 , 效率就稍微降低了。
不过 和业务逻辑 ,还有有时候简化代码的情况相比较这些效率也算不了多少。看情况使用就好了。

至于 || 和 | 的问题同上
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 新年过后,一帮兄弟整天聚在一起打牌,泡吧。 大家都单身多年,最初还结成联盟,创造各种机会互相帮着勾搭各种妹子,也算...
    我想你也在想阅读 647评论 1 4
  • 明乐家塾第二天,在林儿和妞妞身上发生的一件事。 这件当时发生的事,姬老师拿到了课堂,我们一起看这些事背后的规律和真...
    i韩小鱼阅读 611评论 0 11
  • 别看有些人表面风风光光的,背地里也是一副惹人嫌的模样。 今天去电视台参加了节目的录制,也是挺奇特的体验。首先是节目...
    蟒蛇与小莓阅读 589评论 0 0
  • 是时候放慢自己的脚步! 作者:冯永红 时光匆匆,放慢脚步,让自己仰头看看漂浮着闲云的天空。流水曦曦,放慢脚步,俯...
    永红语录阅读 315评论 0 0