- C++
【信息学奥赛】【C++入门】4-逻辑运算符
- 2023-7-4 16:05:04 @
逻辑运算符,也是用来表示布尔值的运算符。其运算的符号两边的关系的真假。
常见的有三种分别是:
与 用&&表示 或 用 || 表示 非 用 ! 表示,我们在前面的关系运算符中其实已经见到了,不等于用 != 1)与运算,当且仅当两边都为真的时候整个式子的值才为真 例如
① 2>1 && 3>2 。 下面我们列表分析,用1表示真,0表示假。
左边 右边 最终结果
1 1 1
②2<1 && 3>2
左边 右边 最终结果
0 1 0
③2>1 && 3<2
左边 右边 最终结果
1 0 0
④
2<1 && 3<2
左边 右边 最终结果
0 0 0
观察以上我们把列表统一到一起:
左边 右边 与 &&,结果 1 1 1 0 1 0 1 0 0 0 0 0 如果要在左边和右边中间加一个数学符号等于右边话,我们发现,填上一个乘号使列表成立,
所以我们有时候为了助记也可以把与运算看成是逻辑乘法。
2)或运算,只要两边有一个为真,结果为真。 我们直接用上面的列表
左边 右边 或 ||,结果 1 1 1 0 1 1 1 0 1 0 0 0 如果要在左边和右边中间加一个数学符号等于右边的话,我们发现,填上一个+号勉强使列表成立,只有第一个不太符1+1=2,
但是我们前面讲过非零为真2也为真,所以+号也可以说成立
所以我们有时候为了助记也可以把与运算看成是逻辑加法。
3)非运算,简单的理解就是取反,原来是真的非之后就是假的 例如:!(2<3)的结果就为真
练习: 我们知道闰年的定义
非整百年能被4整除的年份,整百年能被400整除的年份为闰年
现在用y表示年号,让你写一个式子来判断一个年号是不是闰年。
在这里有一个特殊的年号是1900年它不是闰年,我们一会可以把它代到我们的式子里面验证一下。
首先分析一下句子里各个词是什么关系
首先,都好前后是一个只要满足一个就成立的条件,所以是或的关系,可以用符号表示如下:
非整百年能被4整除的年份 || 整百年能被400整除的年份为闰年
然后再看各个半句,都是必须同时满足的情况,那么就是与的关系,进一步深化我们的句子:
非整百年 && 能被4整除的年份 || 整百年 && 能被400整除的年份为闰年
然后,将上面的句子翻译成代码如下
y%100!=0 && y%40 || y%1000 && y%400 ==0 仔细观察上面的式子,我们发现后半部分有点重复,能被400整除的数肯定能被100整除,所以进一步简化:
y%100!=0 && y%4==0 || y%400 ==0 我们将1900代入到这个式子里就会得到如下算式
0 && 1 || 0 这个式子整体为假,所以1900年补充闰年。
在这里要讲一下,与的短路机制。与运算,只要式子里面计算到一个为假,整个式子的结果都为假(0乘以任何数都得0),那么后面的所有式子都不计算了。 上面的那个式子里其实 计算到第一个y%100!=0就发现为假了,后面的y%4==0 || y%400 ==0都不计算(判断)。