添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
重感情的黄瓜  ·  vim 删除 行尾-掘金·  1 年前    · 
完美的红薯  ·  Qt | ...·  1 年前    · 
&& 运算 符被称为 逻辑与运算符 。它需要两个表达式作为操作数,并创建一个表达式,只有当两个子表达式都为 true 时,该表达式才为 true。
以下是使用 && 运算符的 if 语句示例:
if ((temperature <20) && (minutes > 12))
cout << "The temperature is in the danger zone.";

请注意,这两个被逻辑与运算符连接在一起的表达式都是完整的表达式,它们的值可以被评估为 true 或 false。首先评估 temperature<20 以产生 true 或 false 的结果,然后评估 minutes>12 以产生 true 或 false 的结果,最后,这两个结果被 AND 并列在一起,以得出整个表达式的最终结果。
仅当 temperature 小于 20 且 minutes 大于 12 时,cout 语句才会执行,其中只要有一个表达式的结果被评估为 false,则整个表达式为 false,不执行 cout 语句。
表 2 显示了 && 运算符的真值表。该真值表列出了两个表达式可能的值及其所有可能的组合,以及由连接两个表达式的 && 操作返回的结果值。
表 2 逻辑与 子表达式值所有可能的组合 整体表达式的值 false && false false(0) false && true false(0) true && false false(0) true && true true(1) 如该表所示,要使 && 运算符返回 true 值,则两个子表达式都必须为 true。
注意,如果 && 运算符左侧的子表达式为 false,则不会检查右侧的表达式。因为只要有一个子表达式为 false,则整个表达式都为 false,所以再检查剩余的表达式会浪费 CPU 时间。这被称为 短路评估
|| 运算符 || 运算符 被称为 逻辑或运算符 。它需要两个表达式作为操作数,并创建一个表达式,当任何一个子表达式为 true 时,该表达式为 true。
以下是一个使用 || 运算符的 if 语句示例:
if ((temperature < 20) || (temperature > 100))
cout << "The temperature is in the danger zone.";

如果 temperature 小于 20 或者大于 100,那么 cout 语句将被执行。这两个子表达式只要其中一个为 true,则整个表达式为 true,执行 cout 语句。
注意,被逻辑或连接在一起的两件事情应该都是逻辑表达式,它们的值为 true 或 false,按以下形式书写的if条件是不正确的:
if (temperature <20 || >100)

表 3 显示了或(||)运算符的真值表。
表 3 逻辑或运算符真值表 子表达式值所有可能的组合 整体表达式的值 false || false false(0) false || true true(1) true || false true(1) true || true true(1) 只要其中一个子表达式为 true,则整体表达式为 true,此时另外一个子表达式无论是 false 还是 true 都无关紧要。
需要注意的是,|| 运算符也将进行短路评估。如果 || 运算符左侧的子表达式为 true,则右侧的子表达式将不被检查,因为只要有一个子表达式为 true,那么整体表达式就可以被评估为 true。
! 运算符 ! 运算符 被称为 逻辑非运算符 ,执行逻辑 NOT 操作。它可以反转一个操作数的真值或假值。换句话说,如果表达式为 true,那么 ! 运算符将返回 false,如果表达式为 false,则返回 true。
以下是一个使用 ! 运算符的 if 语句示例:
if (!(temperature > 100))
cout << "You are below the maximum temperature. \n";

首先,表达式 (temperature > 100) 将被测试为 true 或 false,然后!运算符被应用于该值。如果表达式 (temperature>100) 为 true,则!运算符返回 false。如果为 false,则!运算符返回 true。在该例子中,它相当于问“温度是不是不大于 100?”或“温度大于 100 是不是假的?”
表 4 显示了非(!)运算符的真值表。
表 4 逻辑非运算符的真值表 表达式的值 ! false true(1) ! true false(0) 布尔类型是 C99 标准新增加的,定义布尔类型变量的方式有两种,一种是使用 _Bool 类型,另一种是使用 <stdbool.h> 头文件中定义好的 bool 类型,感兴趣的小伙伴请 猛击这里 了解详情。

&&、|| 和 ! 的优先级 &&、|| 和 !的优先级为: ! > && > ||

! 运算符比许多 C++ 运算符具有更高的优先级。因此,为了避免错误,应始终将其操作数括在括号中,除非打算将其应用于没有其他操作符的变量或简单表达式。例如,来看以下表达式:
! (x > 2)
! x > 2

第一个表达式将 !运算符应用于表达式 x>2,它是在问“x 是否不大于 2”,然而,第二个表达式是将 !运算符应用于到 x。它是在问“x 的逻辑是否大于 2”。假设 x 被设置为 5,由于 5 是非零值,所以被认为是 true,而 !运算符会将其反转为 false,即为 0,然后,> 运算符将确定 0 是否大于 2。为了避免这种错误,始终使用括号是明智的。
&& 和 || 运算符的优先级低于关系运算符,这意味着关系表达式先进行计算,然后再通过 && 和 || 运算符进行评估,因此有:
a > b && x < y 等同于(a > b) && (x < y)
a > b || x < y 等同于(a > b) | | (x < y)

因此,在关系运算符与 && 和 || 混合时,通常不需要括号。当然,无论如何,使用括号都是一个好主意,因为它们可以让程序更易读。
一个表达式中,可能包含多种运算符混合使用,例如 !a||++b+2*3&&a--,这种情况下先计算谁后计算谁,要根据各个运算符的优先级和结合性来决定,感兴趣的小伙伴请 猛击这里 详细了解各个运算符的优先级和结合性。

当表达式内包含多个运算符时,强烈建议用 ( ) 括号标明计算顺序。例如,在 && 和 || 同时使用的情况下,由于 && 的优先级高于 ||,如果没有括号表示执行顺序,那么 && 将永远在 || 之前完成,这可能并不符合编写者的初衷。比如有 3 个布尔变量 recentGrad、employed 和 goodCredit,则以下表达式: recentGrad || employed && goodCredit

等同于以下表达式: recentGrad || (employ && goodCredit)

但是它并不等同于以下表达式: (recentGrad || employed)&& goodCredit

关注公众号「 站长严长生 」,在手机上阅读所有教程,随时随地都能学习。本公众号由 C语言中文网站长 亲自运营,长期更新,坚持原创。

微信扫码关注公众号
  • Go语言字符串
  • C++ rotate_copy(STL rotate_copy)算法详解
  • C++ pow(指数函数):求x的y次幂的值
  • C++ seekg函数用法详解
  • Python字符串拼接(包含字符串拼接数字)
  • MySQL比较运算符一览表(带解析)
  • 如何用Sublime Text运行C和C++程序?
  • CSS阴影效果(2种方法)
  • <fmt:setBundle>标签
  • C语言printf函数使用详解
  •