3.7.6 逻辑运算符
3.7.6 逻辑运算符
逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符主要有如下6个。
逻辑运算符 | 描述 |
---|---|
&& |
短路与,前后两个操作数必须都是true 才返回true ,否则返回false ,如果第一个操作数为false则直接返回false,不计算第二个操作数 |
` | |
& |
不短路与,作用与&& 相同,但不会短路。两个操作数都会计算 |
` | ` |
! |
非,只需要一个操作数,如果操作数为true ,则返回false |
^ |
异或,当两个操作数不同时才返回true ,如果两个操作数相同则返回false |
程序示例 逻辑运算符
下面代码示范了或、与、非、异或4个逻辑运算符的执行示意。
1 | // 直接对false求非运算,将返回true |
短路或和不短路或的区别
1 | // 定义变量a,b,并为两个变量赋值 |
执行上面程序,看到输出a的值为5,b的值为11,这表明b++ > 10
表达式得到了计算,但实际上没有计算的必要,因为a>4
已经返回了true
,则整个表达式一定返回true
再看如下代码,只是将上面示例的不短路逻辑或改成了短路逻辑或
1 | // 定义变量c,d,并为两个变量赋值 |
上面代码执行的结果是:c的值为5,而d的值为10。
对比两段代码,后面的代码仅仅将不短路或改成短路或,程序最后输出的d值不再是11,这表明表达式d++>10
没有获得执行的机会。
因为对于短路逻辑或而言,如果第一个操作数返回true
,短路逻辑或将不再对第二个操作数求值,直接返回true
。也就是不会计算d++>10
这个逻辑表达式,因而d++
没有获得执行的机会。因此,最后输出的d值为10。而不短路或总是执行前后两个操作数
短路与和不短路与的区别
&&与&的区别与此类似:
&
总会计算前后两个操作数,&&
先计算左边的操作数,如果左边的操作数为false
,则直接返回false
,根本不会计算右边的操作数。