逻辑运算符:规则、优先级与应用
逻辑运算符是程序设计中用于处理布尔值(真 / 假)运算的核心工具,主要包括逻辑与(&&)、逻辑或(||)、逻辑非(!) 三种,它们的运算规则和优先级直接影响表达式的执行结果。
三种逻辑运算符的运算规则
1. 逻辑与(&&,相当于 AND)
运算规则:当且仅当两个操作数都为 “真(true)” 时,结果才为 “真”;只要有一个操作数为 “假(false)”,结果就为 “假”。
真值表:
| 操作数 A | 操作数 B | A && B |
| ———— | ———— | ——— |
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |示例:
(5 > 3) && (2 < 4)→true && true→ 结果为true(5 > 10) && (2 < 4)→false && true→ 结果为false短路特性:如果第一个操作数为
false,则不再判断第二个操作数(因为结果已确定为false)。
例如:(5 > 10) && (a = 3)→ 由于5>10为false,a=3不会执行,a的值不变。
2. 逻辑或(||,相当于 OR)
运算规则:只要两个操作数中有一个为 “真”,结果就为 “真”;当且仅当两个操作数都为 “假” 时,结果才为 “假”。
真值表:
| 操作数 A | 操作数 B | A || B |
|————-|————-|————|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |示例:
(5 > 10) || (2 < 4)→false || true→ 结果为true(5 > 10) || (2 > 4)→false || false→ 结果为false短路特性:如果第一个操作数为
true,则不再判断第二个操作数(因为结果已确定为true)。
例如:(5 > 3) || (a = 3)→ 由于5>3为true,a=3不会执行,a的值不变。
3. 逻辑非(!,相当于 NOT)
运算规则:对操作数的布尔值取反,“真” 变 “假”,“假” 变 “真”。
真值表:
| 操作数 A | !A |
| ———— | ——- |
| true | false |
| false | true |示例:
!(5 > 3)→!true→ 结果为false!(5 > 10)→!false→ 结果为true
逻辑运算符的优先级
在复杂表达式中,运算符的优先级决定了执行顺序,逻辑运算符的优先级从高到低为:
逻辑非(!) > 算术运算符(*、/、+、-) > 关系运算符(>、<、==、!=)> 逻辑与(&&) > 逻辑或(||)
优先级示例解析
- 表达式:
! (3 + 2 > 5) && 4 < 6- 步骤 1:先算算术运算
3+2=5 - 步骤 2:再算关系运算
5>5→false - 步骤 3:再算逻辑非
!false→true - 步骤 4:再算关系运算
4<6→true - 步骤 5:最后算逻辑与
true && true→true
- 步骤 1:先算算术运算
- 表达式:
3 > 1 || 2 == 5 && !false- 步骤 1:先算逻辑非
!false→true - 步骤 2:再算关系运算
2==5→false - 步骤 3:再算逻辑与
false && true→false - 步骤 4:再算关系运算
3>1→true - 步骤 5:最后算逻辑或
true || false→true
- 步骤 1:先算逻辑非
注意:可通过括号(()) 改变优先级,括号内的表达式优先执行。例如:
(3 > 1 || 2 == 5) && !false→ 结果为true && true = true(与上例结果不同,因括号改变了执行顺序)。
逻辑运算符的应用场景
- 条件判断:在
if、while等语句中,用于组合多个条件。
例如:判断一个数是否在 1~100 之间(含边界):if (num >= 1 && num <= 100) { ... } - 状态校验:验证多个条件是否同时满足或至少满足一个。
例如:用户登录时,用户名和密码都正确才允许登录:if (username == "admin" && password == "123456") { ... } - 短路控制:利用
&&和||的短路特性,简化代码(避免冗余的if判断)。
例如:当a不为null时,才执行a.doSomething():if (a != null) { a.doSomething(); }→ 可简化为a != null && a.doSomething();