本文转载自:VC驿站
https://www.cctry.com/thread-279233-1-1.html
1、逻辑运算概述:
为什么会有逻辑运算呢?举个例子,上节课的一段小代码:
int zhangsan_age = 0, zhangsan_sex = 0;
cin >> zhangsan_age >> zhangsan_sex;
if (zhangsan_age < 18)
{
if (zhangsan_sex == 1)
{
cout << "张三是个男孩" << endl;
}
}
即:要求年龄在 18 岁以下,性别是男性,两个条件都满足的前提下,才进行打印:张三是个男孩
又或者,我让你用 if 进行这个判断,判断 zhangsan_age 年龄在 1-18岁之间,看是否满足条件?怎么判断呢?
可以这样:
if (zhangsan_age >= 1)
{
if (zhangsan_sex <= 18)
{
cout << "张三是个男孩" << endl;
}
}
这样写很是麻烦,而且会嵌套了好几层,有没有更简便的写法呢?当然有了,就是使用逻辑运算符:
if (zhangsan_age >= 1 && zhangsan_sex <= 18)
{
cout << "张三是个男孩" << endl;
}
简单吧?一个 if 就搞定了。
2、C++中提供了三种逻辑运算符:
①、&& 逻辑与 相当于其他语言中的 AND
②、|| 逻辑或 相当于其他语言中的 OR
③、! 逻辑非 相当于其他语言中的 NOT
3、逻辑运算符的运算规则:a 和 b 是表达式
a && b 若 a 和 b 同时为真,a && b 的结果为真,只要有一个为假,则 a && b 的结果为假
a || b 若 a 或 b 其一为真,a || b 的结果为真,若 a 和 b 同时为假,则 a || b 的结果为假
!a 若 a 为真,则 !a 为假,若 a 为假,则 !a 的结果为真
int zhangsan_age = 0;
cin >> zhangsan_age;
if (zhangsan_age < 14 || zhangsan_age > 60)
{
cout << "张三是个小孩或者老人,不能欺负他" << endl;
}
备注:咱们上面说了这么多真和假,一般逻辑表达式的值是一个逻辑的量 “真” 或 “假”。那么反应到我们程序代码中得到运算结果时,以数值 1 代表 “真”,数值 0 代表 “假”。一般更宽泛的做法是:数值 0 代表 “假”,非0都代表 “真”。
举几个例子:
若 int x = 5; 则 !x 的值就是0,因为 x 的值是5,非0,所以是真,!x 就是假了,也就是0了;
若 int x = 5, y = 4; 那么 x && y 的结果就是真,int z = x && y; 你会发现 z 的值是1;
若 int x = 5, y = 4; 那么 !x || y 的结果是多少呢?到底是先算逻辑非,还是先算逻辑或呢?这就涉及到他们的运算符优先级了。大家可以找下《实用C++》第8课的课程说明文档,我当时给大家打包了一个运算符优先级的图标,大家可以查一下C++中的三个逻辑运算符的优先级是怎么样的顺序呢?https://www.cctry.com/thread-278817-1-1.html
4、逻辑运算符的优先级:算是本节课的小作业,大家课后完成!
5、冒号表达式:
冒号表达式又叫条件表达式,是唯一一个三目运算符,就是需要三个参数的运算符。先举个 if 语句的例子,求出 变量 x 和 y 的最大值,并打印出来:
int max = 0;
int x = 0, y = 0;
cin >> x >> y;
if (x > y)
{
max = x;
}
else
{
max = y;
}
cout << "最大数是:" << max << endl;
求 x 和 y 中的较大数,我用了一个 if-else,那么有没有简单一点的方法呢?答案是当然有,就是要讲解的这个冒号表达式:
max = x > y ? x : y;
就这么一句话,就可以将 x 和 y 中较大的数的值赋值给 max 变量,怎么样,方便吧?
6、冒号表达式的规则:
表达式1 ? 表达式2 : 表达式3
若表达式1为真,则返回表达式2的值,若表达式1为假,则返回表达式3的值。如此而已!
第11课视频教程下载地址: