15.运算符-逻辑运算符
15.1 知识点
逻辑运算符是什么
逻辑运算符是用来对 bool
类型进行逻辑运算的,主要用于两个表达式之间的逻辑运算。
基本规则:左侧内容 逻辑运算符 右侧内容
逻辑与
符号:&&
并且
基本规则
对两个 bool
值进行逻辑运算,有假则假,同真为真。
bool b1 = true;
bool b2 = false;
bool result;
result = b1 && b2;
cout << result << endl; // false
result = true && true;
cout << result << endl; // true
result = true && false;
cout << result << endl; // false
result = false && false;
cout << result << endl; // false
result = false && true;
cout << result << endl; // false
优先级
逻辑运算符优先级低于关系运算符和算术运算符。
result = 4 > 1 && 1 + 2 < 5;
cout << result << endl; // true && true = true
int i = 3;
result = i <= 5 && i > 1; // 1 < i <= 5
cout << result << endl; // true && true = true
多个逻辑与组合运用
在没有括号的情况下,从左到右依次计算;有括号时,先计算括号内。
result = 4 > 1 && 3 < 2 && true && false;
cout << result << endl;
// false && true
// false && false
// false
特殊用法
逻辑与可以直接与数字计算,非零代表 true
,零代表 false
。
result = -1 && -3;
cout << result << endl; // true
逻辑或
符号:||
或者
基本规则
对两个 bool
值进行逻辑运算,有真则真,同假为假。
result = true || true;
cout << result << endl; // true
result = true || false;
cout << result << endl; // true
result = false || false;
cout << result << endl; // false
result = true || (false || false) || true;
cout << result << endl; // true
result = 1 + 2 || 3 - 3;
cout << result << endl; // true
其他规则
逻辑或的优先级、多个逻辑或的组合运用及特殊用法规则与逻辑与相同。
逻辑非
符号:!
非
基本规则
对一个 bool
值进行取反,真变假,假变真。逻辑非的优先级较高。
result = !false;
cout << result << endl; // true
result = !5 > 1;
cout << result << endl; // false (!5 > 1 -> false > 1 -> 0 > 1)
result = !(5 > 1);
cout << result << endl; // false
混合使用优先级问题
规则
!(逻辑非)
优先级最高&&(逻辑与)
优先级高于||(逻辑或)
- 逻辑运算符优先级低于算术运算符和关系运算符(逻辑非除外)。
bool gameOver = false;
int hp = 100;
bool isDead = false;
bool isMustOver = true;
result = gameOver || hp < 0 && !isDead || isMustOver;
cout << result << endl; // true
// false || false && true || true
// false || false || true
// false || true
// true
逻辑运算符的短路规则
短路规则
- 逻辑或:有真则真,左侧为真时,右侧不重要(不会被执行)。
- 逻辑与:有假则假,左侧为假时,右侧不重要(不会被执行)。
int i2 = 3;
// 逻辑或
result = i2 > 0 || ++i2;
cout << i2 << endl; // 3
// 逻辑与
i2 = 3;
result = i2 < 0 && ++i2;
cout << i2 << endl; // 3
15.2 知识点代码
Lesson15_运算符_逻辑运算符.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "逻辑运算符\n";
#pragma region 知识点一 逻辑运算符是什么
// 是用来对bool类型 进行逻辑运算的
// 主要用来进行两个表达式的逻辑运算
// 基本规则:
// 左侧内容 逻辑运算符 右侧内容
#pragma endregion
#pragma region 知识点二 逻辑与
//符号 && 并且
//1.基本规则
// 对两个bool值进行逻辑运算 有假则假 同真为真
bool b1 = true;
bool b2 = false;
bool result;
result = b1 && b2;
cout << result << endl;//false
result = true && true;
cout << result << endl;// true
result = true && false;
cout << result << endl;// false
result = false && false;
cout << result << endl;// false
result = false && true;
cout << result << endl;// false
//2.优先级
// 逻辑运算符优先级 低于 关系运算符 算术运算符
result = 4 > 1 && 1 + 2 < 5;
cout << result << endl;// true && true = true
int i = 3;
result = i <= 5 && i > 1;// 1 < i <= 5
cout << result << endl;// true && true = true
//3.多个逻辑与 组合运用
// 在没有括号的情况下 从左到右 依次看即可
// 有括号 先看括号内
result = 4 > 1 && 3 < 2 && true && false;
cout << result << endl;
// false && true
// false && false
// false
//4.特殊用法,直接和数字计算
// 非0代表true,0代表false
result = -1 && -3;
cout << result << endl;// true
#pragma endregion
#pragma region 知识点三 逻辑或
//符号 || 或者
// 基本规则
// 对两个bool值进行逻辑运算 有真则真 同假为假
// 优先级规则、多个逻辑或组合运用、特殊用法 规则和逻辑与相同
result = true || true;
cout << result << endl;// true
result = true || false;
cout << result << endl;// true
result = false || false;
cout << result << endl;// false
result = true || (false || false) || true;
cout << result << endl;// true
result = 1 + 2 || 3 - 3;
cout << result << endl;// true
#pragma endregion
#pragma region 知识点四 逻辑非
//符号 ! 非
// 基本规则
// 对一个bool值进行取反 真变假 假变真
// 它的优先级较高
result = !false;
cout << result << endl;// true
result = !5 > 1;
cout << result << endl; //false !5 > 1 => false > 1 => 0 > 1;
result = !(5 > 1);
cout << result << endl; //false
#pragma endregion
#pragma region 知识点五 混合使用的优先级
// 规则
// !(逻辑非)优先级最高
// &&(逻辑与)优先级高于||(逻辑或)
// 逻辑运算符优先级 低于 算数运算符 关系运算符(逻辑非除外)
bool gameOver = false;
int hp = 100;
bool isDead = false;
bool isMustOver = true;
result = gameOver || hp < 0 && !isDead || isMustOver;
cout << result << endl;// true
// false || false && true || true
// false || false || true
// fales || true
// true
#pragma endregion
#pragma region 知识点六 逻辑运算符短路规则
//逻辑或 有真则真 左边只要为真了 右边就不重要(不会被执行)
int i2 = 3;
result = i2 > 0 || ++i2;
cout << i2 << endl;//3
//逻辑与 有假则假 那左边只要为假了 右边就不重要(不会被执行)
i2 = 3;
result = i2 < 0 && ++i2;
cout << i2 << endl;//3
#pragma endregion
}
15.3 练习题
求打印结果是什么?
cout << true || true;
cout << false || true;
cout << true && true;
cout << true && false;
cout << !true;
cout << (true || true) << endl; // true
cout << (false || true) << endl; // true
cout << (true && true) << endl; // true
cout << (true && false) << endl; // false
cout << !true << endl; // false
求打印结果是什么?
bool gameOver;
bool isWin;
int health = 100;
gameOver = true;
isWin = false;
cout << (gameOver || isWin && health > 0);
解析:
gameOver || isWin && health > 0
按运算优先级:isWin && health > 0
->false && true
->false
gameOver || false
->true
最终结果:
cout << (gameOver || isWin && health > 0); // true
15.4 练习题代码
Lesson15_练习题.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "逻辑运算符 练习题\n";
#pragma region 练习题一
//求打印结果是什么?
cout << (true || true) << endl; // true
cout << (false || true) << endl; // true
cout << (true && true) << endl; // true
cout << (true && false) << endl; // false
cout << !true << endl; // false
#pragma endregion
#pragma region 练习题二
//求打印结果是什么?
bool gameOver;
bool isWin;
int health = 100;
gameOver = true;
isWin = false;
// true || false && true
// true || false
// true
cout << (gameOver || isWin && health > 0);
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com