女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩想进阅读室:带了借阅卡,并且现在开放。只满足一个条件够吗?

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 有卡true
  2. 开放false
  3. 两个都要true && false
  4. 结果false

&& 要求两边都成立,|| 只要求至少一边成立,! 把真假反过来。

可以用两张“是/否”卡片摆出四种组合,观察门什么时候打开。

01为什么要组合条件?

有时一个条件不够。

例如“年龄至少 10 岁,而且已经报名”才能参加活动:

age >= 10 && registered

02&&:两个条件都要满足

&& 表示逻辑“与”。只有两边都为 true,结果才是 true。

ABA && B
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

03||:至少一个条件满足

|| 表示逻辑“或”。只要至少一边为 true,结果就是 true。

isWeekend || isHoliday

04!:把真假反过来

! 表示逻辑“非”。

!true   // false
!false  // true

例如:

if (!gameOver) {
    // 游戏还没结束
}

05括号为什么很重要?

逻辑表达式也有运算符优先级。! 的优先级高于 &&&& 又高于 ||

但复杂条件最好主动使用括号:

(age >= 10 && registered) || hasSpecialPass

06什么是短路求值?

C++ 的 &&||短路求值

如果 A && B 中 A 已经是 false,就不会再求值 B;如果 A || B 中 A 已经是 true,也不会再求值 B。

p != nullptr && p->value > 0

只有当 p != nullptr 为 true 时,右边才会继续执行。

你已经知道了什么

  • && 表示逻辑与,两边都真才真。
  • || 表示逻辑或,至少一边真就真。
  • ! 表示逻辑非,把真假反过来。
  • 复杂逻辑表达式应合理使用括号。
  • &&|| 具有短路求值特性。

下一篇:数据类型为什么重要?

轮到你来试一试

有卡或有临时证都可进,两样都有会不通过吗?

想好了吗?点开看解释

不会。逻辑或在至少一个条件为真时成立,两边都真也成立。