当前课程知识点:C/C++:从基础语法到优化策略 > Final Exam > Final exam > 3.6 Logical expressions
返回《C/C++:从基础语法到优化策略》慕课在线视频课程列表
我们再来说一说逻辑运算
逻辑运算符有三个
第一个是or 或操作写成两个竖线
还有第二个 是and 与操作写成两个 && 符号
第三个是not是非操作 写成一个!
那我们先来说说or操作 也就是或操作
或操作这两个竖线 首先它的优先级要比关系运算要低
因为我们经常把关系运算跟逻辑算组合在一起形成一个条件
我们要记得or操作要低一些
还有就是还有一个点很容易出错的
就是也容易记得 就是在或操作的时候
他可能就是说 比如说这个例子吧
假如a等于1 b也等于1
那么我们这个表达式 if后面这个条件表达式是a || b++
那么在这个两侧他是从左往右去算
既然它是或运算a是1那么转成二进制就是True
那这个时候无论右边是True 还是False
那么 这个表达式的值已经确定了 他肯定只能True
所以呢 他不会再去进行右侧的计算
也就是b++ 这个操作不会执行 不会执行
这样呢 我们来看个例子
这个代码 我们先定义a等于1 b等于1 a和b都等于1
那么我们把ab打印出来 毫无疑问 它等于1
那么我们执行这个操作之后
a首先是True 或后面的b++就按照我们刚才的讲解 应该没有必要进行运算了
所以说 b的值 b的值应该是多少呢
在这a和b 那应该是还是1 还是1 如果b参与了运算
就是这个条件进行执行了 那么b就会变成2
所以说 我们来编译一下 看看这个程序到底是几
我们来看这个结果 我们看到ab全部是1这就说明
这个公式没有参与计算 没有参与计算
好 我们来继续
前面这个地方说
或运算的True和False一共有四种情况 哪种是True哪种是False
只要有一个是True 那全是True
只有两个是False 他才会是False
所以这个就比较简单的逻辑运算了
and的话 那么跟or是不太一样
就是只有两个两侧的两个都是True才会是True 否则全部会False
所以这个的规律跟or是类似的 它的优先级也是比关系运算要低要低
也就是说 如果你有关系运算的话 先做关系运算 然后才轮到and或者or
那么同样的就是说如果你and符号连的左侧确定是false了
那么无论右侧是什么值 那都不会影响最终结果了
那这个时候他就不会去 右侧的表达式 不会来进行计算
这样是来省时间
还有就是not not操作就是非操作
这个其实就是用的时候直接在表达式的前面
加个!就可以加个!就可以
那么他就会True变成False False变成True
当然 需要注意的是 如果表达式是True或者非零
如果是个2 3次 只要是非零 那么加上一个!做非
那他的纸就会变成了False 也就是零 也就是零
如果他的表达式是False的话
那么加上这个 那就是True
在C++里面 跟其他有些编程语言不一样
True和 1 False和0是等价的
我们再来看 那么在这个里面优先级 优先级来说
not是最高的 not是最高的
然后 and and是次之 最后是or操作 最后是or操作
所以整个这样写下来也是not最高 非操作是最高 也就是!最高
然后是关系操作 后面才是and再就是or那就是or
所以我们再来看这个例子
这个例子里面还是刚才那个代码 cout a>0 && b
我们都知道a和b都是1是吧 那么 a > 0是True
b呢 b是数 那就是False
所以这个时候这个首先是先做这个 优先级最高那他是False
然后呢 这边是True True && False
那它的结果就是什么
我们看一看 打印出来 我们刚才注释掉了 保存一下然后编译运行
我们来看
他输出结果是零 实际上不是 但是没有输出False他只是输出的零 输出零
最后再讲一讲就是提一下
我们有一个library 一个头文件 就是我们可以include cctype
这个里面是一堆跟字符相关的函数
它用来判断有很多的比如is开头的函数
来判断这个字符是什么
比如isspace就表示这是一个空格 isdigit就表示是数字
isalnum就属于数字或者字母
那这种情况他就可以进行判断
这有一系列函数 那它的返回值也是True或者False 或者0 或者1
-Quiz 1
-Quiz 2
-3.3 Relational expressions (> < ==)
-3.5 Branching statements (if else)
-3.8 break and continue statements
-Quiz 3
-4.4 Structures, Unions and Enumerations
-Quiz 4
-5.3 Allocate memory: C++ style
-Quiz 5
-6.3 Recursion and pointer to functions
-Quiz 6
-Quiz 7
-8.1 C/C++ with ARM development board
-Quiz 8
-9.2 Constructors and destructors
-Quiz 9
-10.1 Operators in cv::Mat in OpenCV
-10.4 Automatic conversions and type casts for classes
-Quiz 10
-11.1 Dynamic memory and classes
-11.2 New and improved String class
-11.3 Using pointers to objects
-Quiz 11
-12.2 Static and dynamic binding
-12.3 Access control: protected
-12.4 Inheritance and dynamic memory allocation
-Quiz 12
-13.1 Constructor and assignment
-13.2 Classes with object members
-Quiz 13
-14.1 CNN for image classification
-Quiz 14
-15.3 RTTI and type cast operators
-Quiz 15
-Final exam