&& 逻辑与,|| 逻辑或 称为逻辑运算符
& 按位与,| 按位或 称为位运算符
if(a==1&&b==2) 这是说既要满足a=1也要满足b=2
if(a==1||b==2) 这是说或者满足a=1或者要满足b=2
而a&b或者a|b则是二进制的与或运算
&同为1时为1,否则为0
|同为0时为0,否则为1
3&5则
0011
&0101
0001
等于1
3|5则
0011
|0101
0111
等于7
&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真
例题:
下面代码的输出结果是什么?
-
class Test {
-
public static void main(String[] args) {
-
int a = 3;
-
int b = 4;
-
if ((a>b&(a++)>b&&(--b)<a)|(b++)<=(a--)) {
-
System.out.println("判断结果为true, a=" + a + ",b=" + b);
-
} else {
-
System.out.println("判断结果为false, a=" + a + ",b=" + b);
-
}
-
}
-
}
A.判断结果为true, a=3,b=5
B.判断结果为true, a=3,b=4
C.判断结果为false, a=3,b=5
D.判断结果为false, a=4,b=4
如果忽略&和&&的区别,很可能得到答案B.
但正确答案其实是A.
解析:短路与&&只要当前项为F,直接得出结果为F,不进行后面的运算(一假必假)
短路或 | | 只要当前项为T,直接得出结果为T,不进行后面的运算(一真必真)
a++与++a的区别:
如果单独使用没有任何区别,
如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算
(貌似加不加括号没影响?)
分析
(a>b&(a++)>b&&(--b)<a)|(b++)<=(a--)
由于逻辑运算符有优先级,可以由'|'将此表达式分隔,
1.左边a>b为假,但连接它的是一个&运算符,这代表不管它是否正确,都继续运算其右边的表达式.
2.(a++)>b,同1,在计算完后a的值为4;此时由于它的右边为短路与&&,且其值为false,将不再计算&&右边的逻辑表达式,那么意味着右边的(b--)将不被运算
3.符号'|'左边整体值为false,右边(b++)<=(a--)即4<=4,结果为true;那么整个逻辑表达式的结果为true,计算后b的值为5,a的值为3
原文:https://blog.youkuaiyun.com/sinat_33033041/article/details/75557404
短路与&&和短路或||都提高了逻辑表达式的计算效率.
http://www.360doc.com/content/16/0716/22/16920390_576148549.shtml
https://blog.youkuaiyun.com/sinat_33033041/article/details/75557404