• C,C#,C++中&&和||,&和|的联系和区别


    本文来自:http://www.cnblogs.com/GT_Andy/archive/2010/03/30/1921805.html

    两者计算结果相同(针对各自的运算对象),只是性能上有差别而已。

    &&和||:逻辑运算符

    &和|:按位运算符

    &&是且的意思,a&&b 两者都为真才为真.
    ||是或的意思,a||b 两者有一为真即真.

    &,|是位运算符.即对位进行运算,
    如00000011 & 00000001=00000001
    00000011 | 00000001=00000011

    对于(&&,||),运算的对象是逻辑值,也就是True/False
    运算结果只有下列四种情况。
    True  && True  = True
    True  && False = False
    False && True  = False
    False && False = False

    True  || True  = True
    True  || False = True
    False || True  = True
    False || False = False

    对于(&,|),运算的对象是位,也就是1/0
    运算结果只有下列四种情况。
    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0

    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0

    &&和&对于他们各自的运算对象来说,结果是一样的。
    同理,||和|也是一样的。

    比如:5&&2 的运算结果,是这样对待的。
    首先5,非零,即为True
    2,非零,True 
    True&&True = True
    结果即为True。整个的运算过程是需要做变换的。并不是直接使用操作数的二进制直接比较。所以结果是不同的。在比较的时候,True应该会被转成类似11111111这样的二进制的值,False可能会转成00000000。

    这里的一样,说的是针对运算对象。
    &&的运算对象是True/False    不管你使用的是什么类型的表达式,他首先要转换为True/False中的一个,然后才参与运算。
    &的运算对象就是0/1,不需要转换,有多少位直接计算多少位就可以了。

    &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

    &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

    &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01

  • 相关阅读:
    国外程序员整理的 C++ 资源大全
    31部黑客电影
    向windows添加环境变量
    windows 查看动态连接库和静态连接库的方法
    十大最值得注意的MySQL变量
    源码圈 300 胖友的书单整理
    82岁“极客”老人用云计算写族谱, 90后败给“30”后!
    Redis 实现队列http://igeekbar.com/igeekbar/post/436.htm
    借助CSS Shapes实现元素滚动自动环绕iPhone X的刘海
    听说程序猿的密码大多是这样滴~看完心累中。。。
  • 原文地址:https://www.cnblogs.com/zhouyunbaosujina/p/4003028.html
Copyright © 2020-2023  润新知