阅读 67

EasyC++24,逻辑表达式

这是EasyC++系列的第24篇,简单聊聊逻辑表达式。

想要追求更好阅读体验的同学,可以点击访问github仓库。

逻辑表达式

我们无论是在for循环还是while循环或者是if条件判断当中,都用到了逻辑判断。

我们之前举的例子都非常简单,都是单个的判断。有时候我们的逻辑非常复杂,判断的条件有多个,这个时候就需要使用逻辑表达式了。

逻辑表达式由多个逻辑运算符连接在一起,逻辑运算符分别有OR, AND和NOT,翻译过来就是与或非。

OR运算符

or运算符翻译过来是“或”的意思,表示两者或多者当中,有一个为true时结果为true,写作||,注意这里有两个竖线,单个竖线也是或运算,不过是位运算当中的或运算,表示的含义不同,千万不要搞错。

使用或运算符我们可以将多个判断条件并列在一起,只要有一个为true,最终的结果就是true

5 == 5 || 4 < 4; 5 > 3 || 2 < 1 || 4 < 7; 复制代码

这里||运算符的计算优先级比比较运算符低,所以这里可以不用括号。另外C++当中规定||运算符也是一个顺序点,意味着编译器会计算左侧的值,再计算右侧的值。只要遇见表达式的结果为true则停止,不会再继续往右计算。

AND运算符

and运算符翻译过来是“与”的意思,表示两个条件同时满足,即两者皆为true时结果为true,写作&&

5 == 5 && 4 == 4; 4 == 3 && 1 < 2; 复制代码

同样,&&运算符的优先级也小于比较运算符。另外,&&运算符也是顺序点。意味着C++先执行左侧结果,再执行右侧。如果左侧结果为false,那么右侧的结果将不会再执行。这个特性非常有用,特别是当我们使用一些可能会非法的元素的时候,例如:

string s; if (n < s.size() && s[n] == 'h') {     // do something } 复制代码

在上面这个例子当中,我们需要判断s[n]这个元素,但是由于n可能很大超过字符串的范围。所以在使用之前需要先进行判断,如果n < s.size()不成立,那么s[n]==h的判断将不会执行,也就不会引发报错了。

C++当中还给了一个case,当我们用&&运算符来判断范围的时候,千万不要进行简写:

if (a >= 5 && a < 10);  // 合法 if (5 <= a < 10); // 非法 复制代码

因为后者在编译器当中表示不同的含义,会被翻译成(5 <= a) < 10,也就是先判断5 <= a,拿这个结果再去和10进行判断。显然5 <= a的结果是一个bool值,它一定是小于10的,那么无论a等于多少,这个表达式永远为true

NOT运算符

not运算符也就是非运算符,表示对一个逻辑表达式的结果取反。true变成falsefalse变成true,写作!。例如:

if (!(x > 5)); 复制代码

and和or运算符的优先级都低于比较运算符,但not运算符不然,它的优先级高于所有的关系运算符和算术运算符。所以如果我们取反的对象是一个表达式,一定要记得加上括号。

比如:

!(x > 5); !x > 5; 复制代码

后者会先对x计算取反的操作,得到的结果为truefalse,无论是哪个值它都显然小于5。

另外,not运算符的优先级高于and高于or。因此表达式:

age > 30 && age < 45 && !flag || weight > 300 复制代码

会被解释成:

(age > 30 && age < 45 && (!flag)) || weight > 300


作者:程序员老梁
链接:https://juejin.cn/post/7028033414196363278


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐