美文网首页iOS技术专题
&& 和 & 的区别 , | 和 ||

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

作者: 木兮_君兮 | 来源:发表于2018-06-04 11:25 被阅读42次

    &&

    逻辑与运算
    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 进行比较 , 效率就稍微降低了。
    不过 和业务逻辑 ,还有有时候简化代码的情况相比较这些效率也算不了多少。看情况使用就好了。
    
    至于 || 和 | 的问题同上
    

    相关文章

      网友评论

        本文标题:&& 和 & 的区别 , | 和 ||

        本文链接:https://www.haomeiwen.com/subject/hquesftx.html