00:01
我们来看下一个运算符,叫逻辑运算符。什么是逻辑算符呢?它是用于连接,它是用于连接多个条件的。那么这个条件呢,一般来说就是关系表达式,就是呃,相当于说你可以理解成是逻辑运算符,是用来连接多个关系表达式的这么一种运算符。那最后最后这个运算的结果呢,要么是真,要么是假,也只有两两种值,真或者是假。我们来看一下逻辑运算符在C里面有哪些,下面呢,我们列出了C语言支持的所有逻辑运算符。逻辑算法,那第一个这个就是逻辑与。两个竖杠叫逻辑或一个叹号。这种符号叫逻辑非。那他预算的规则是什么样子的呢?对于逻辑与而言,如果两个操作数都为非零,那么这个条件就为真,就是两个两个操两边的条件都为质,都为非零,它才能为为真。那么我们来看这个案例A。
01:10
逻辑与B为假,为什么呢?你看啊,A是A是一代表一,代表真吗?B为零代表假,大看A和B。那么。A和B,就是说A是为真的,A为真T处嘛,B为假force。那么两个与了过后呢,还是甲?与的意思就是说,只有A和B同时为真,那么它的结果才为真,否则就会假。就两个条件都要为真才为真,明白这意思吧,简单说这两个条件。都为非零,非零不是属于真的意思吗?非零不就真的意思吗?对,或者说这样写啊,就是就是两个两个数都为非零,都为真才为真,否则为假,加上去就啊否则。
02:04
否则结果为,为什么呢为零。呃,微定当就是假的意思了。这个能理解了吧,现在说的更清晰了,那么逻辑或呢?两个操作数中有任意一个非零,有任一个非零就是为真的意思吗?对,条件就为正。就只要里面有一个为真就为真,那大家看A逻辑或B就为真,为什么呢?因为一为真,所以这整个结果就为真了。逻辑非是什么意思呢?用来逆转操作逻辑状态的,反其道而行之,就说如果你原先为真,我用一个逻辑非就变成假了,你原先为假,我用逻辑非就变成真了,就是逆,就是逆转操作。就这么意思,大家看我们看这个结果A逻辑与B,它原先这个结果是不是为假呀,但是我括起来过后呢,给它来一个逻辑飞,那整个结果就会真了,为什么呢?因为你这个结果是假。
03:08
我一个逆转操作就变真了吗?好的,这就是我们逻辑运算符的一览,下面呢,我们为了加深音效,我们分别举几个例子来说明一下,大家看这边有一段代码,这有一个。Double记录一个成绩,这是一个人的成绩。那么这个成绩呢,下面看我这里写了一个条件哈,If如果怎么怎么样,如果我们这个考大于。等于60,并且它小于等于80,我们就输出OK。一请同学们思考。请同学们思考,现在这个条件满足吗?也就是说这个成绩他是不在60和80之间。是不是同时满足,因为你看啊,70是不是大于等于60这个为真。
04:01
同时呢,它还满足什么呀,这个70小于零,因此这个结果呢,就应该输出OK。输出OK1。输出OK。因为这整个这个结果实际上是为真的,就是就是什么呢?就是这这里面的这一个运算结果。它就是一个逻辑表达式,那么因为它两边都为真,所以说整个老师。高亮的这个呢,就为真。他一旦为人就进到里面输出,OK1好,我们来运行一下,看是不是这样子的。那我们大家玩一把,那现在呢,我们在这先写一个文件叫逻辑操作符,写一下logic。Logic。Operator。Operator,好,我们写一写啊,同学们,那现在呢,我们把它的后缀改成C,我们运行运行就可以了,Include ST dl。
05:05
Void主函数,把刚才这一段代码,同学们在这我们看的这段代码呢,拿过来用一下就可以了。放这啊,那这个地方呢,根据我们刚才分析,应该输出OK,因为我们这个70,它大于等于60,同时满足小于等于80,所以说它就进到K1了,我们运行一把。跑起来,我们看是不是输出了,OK。好,我们发现呢,的确输出OK,正确,紧接着我们看下一个案例,再看这个案例,这个案例呢,它也是用来讲解逻辑与的一种案例,大家看这里面定义了两个变量,一个是A等于十,B等于99,然后呢,它这写的这样一个条件,A小于20。A小于二是成立吗?同学们?
06:00
A小于20成立吗?显然不成立,也就是说这个条件同学们看到这个条件已经为甲了。因此这个为假的话,根据刚才讲的这一个逻辑与的规则,只要有一个为假下,那整个这个这个结果肯定都会讲,因此IF1句肯定不会进来,但是他他在里面问了一下B等于多少。大家看,理论上来说,他应该先执行这句话。再执行这个应该是B加加B加加,就说这个B加加完了后再去跟100比较,但是我们知道因为这个运算的结果,而这刚才我说错了啊,刚才说错了这个十啊,刚才说的不好意思。这个十啊,十小于十小于20是成立的啊,刚才老师说错了,这个地方A小于20是成立的,A小于24成立,这个为真,这个为真过呢,他再去判断这个是否为真。
07:02
那么B加加,诶同学们这个B加加呀,是前加加还是后加呀,看一下是不是后加加,如果是后加加的话呢,它其实是先把这一个99跟100进行比较。也就是他先比较再自身那99大于这个100吗。99并不大于100,因此这个结果就会假,但是他自己还是自真的哟,所以说OK 100是不会输出的,但是B呢,它其实变成了100。好,我们来看一下这个结果是不是跟老师分析的一样。好,我先把这个呢,先给同学们注销一下好不好,来执行一下,我们刚才分析的结果是OK 100不会输出。因为为什么呢?因为你这个B加加完了过后,这B在没有加之前跟他判断,其实它99并不大于100,因此这个为甲,这个为甲的话呢,并不会进到OK100,那就但是你还是加了一下,所以说这个B呢,应该等于100,但是不会输出OK100运行。
08:13
运行过后呢,我们可以看到这个结果跟我们想的应该一样,那我再问同学们一个问题,可能有同学说,诶老师,那你你怎么敢证明是这个B加加,呃,是是先比较再再加呢,我可以这样给你举个例子,比如说我写个90。99。99,那如果同学们看啊,就是我们这个B加加。因为这个是后加加,所以他是先比较再自身。所以说呃,所以说你这个B加加你你这样做完了过后,这样过过他仍然不会进来,因为他是先让这个99去跟99比较,先让99并不大于99,所以说他还是不会进来。
09:00
他还是不会进来,那么在这种情况下,他仍然也只输出B等于100,这个能理解不来看。还是只输出B等于100。没问题吧,我再改一下。看同学们能不能告诉我输入什么加加。如果我这个加加是写在前面的那个,同学们想想他会怎么错?他会怎么做,是不是这个时候就是先把这个B加,加完了过后再跟99比较,那显然B本身是99,它先加了一个一变成100 100大于99了,成立的,所以说如果这样子做的话呢,会输出OK100,然后再输出B等于100。大家认同吗?肯定是这样子的,说这个这样子的会先,如果我们是把加加写在前面的,他会先输出这句话,再输出B等于100,我们看是不是跟老师分析的一样哈,注意听。没有任何问题。
10:01
看到没有,OK 100对,那同学们我再考大家一下,看看同学们能不能回答上来哈,回答上来,我把这个呢改成二。我把这个A改成二,请同学们思考此时此刻,此时此刻这个题输出什么?输入什么,我先给大家说一下这个这个结果,结果啊,肯定不会再输出OK100了。那么这个如果你改成这个BB小于二的话呢,这个地方就输出的是什么,我可以告诉你们就是99,而不是100。为什么呢?你先看结果。只输出一个B等于99。你看。哎,苏老师怎么回事呢?我跟大家说一下啊,我说说注意我说明一下。说明嗯,说明第一点,第一点就是在注意听,在进行这个在进行逻辑与操作时,注意听操作时如果如果第一个第一个条件。
11:11
为假了?We force。则后面的条件不再判断。不再判断。那么这个现象呢,称之为什么呢?该现象,该现象称为什么呢?短路现象。短路现象,所以所以这个在有些书上它是这么叫的,所以,所以我们这个逻辑语也称为注意听这句话也称为什么呢?短路逻辑语。这个这两个叫法是一个意思。那你看,如果我把这个改成这个样子的话,你们可以看到A是十,十肯定不小于二。因此,这个结果其实已然为false了。
12:04
也就是说这个时候这个结果就已经是零了。那么。这个编译器会怎么考虑呢?他认为你这个地方为假,后面这个这个东西不管是真还是假,整个这个结果。是不是都未加呀。因此他就不执行了。也就他就会放弃对加加B大于九的这个操作。因此。这个执行完毕过后,一旦为假,后面后面这个不执行,因此呢,这个B就没有指针,因此它就输出99。理解这意思了吧,我说清楚了啊,我已经说清楚了。大家应该也很好理解,并不难,好紧接着呢,我们再来看我们的这个逻辑语的操作,逻辑语的操作呢,我们仍然看一个案例,给大家讲一下就可以了,非常的简单,来看一下。还在这儿来?卡在这了,那么我在这里呢,也把这个代码拿过来,我把上面先注销一把,同学们。
13:02
先注销一把。那么我们来分析一下,A等于十,B等于99,这个没问题,那我们大家A小于五成立吗?十小于五肯定是不成立的,为什么十就本身就不小于它吗?它不小于。因为他是货,所以说他会去干什么呢?他会去执行后面这句话,B加加,诶我问大家B加加,这个加加是在后边,是不是先把99跟100比较再自增。因此,这个地方。你99,也就是说你这方是判断的,后面这个是99大不大于100,显然也不成立,所以说这个为假,这个也为假,那显然整个这个结果。也为甲,那最后这个B输出什么呢?这个地方B应该输出一个100。能理解不好,就这意思,那么我们同样给大家再来运行一下,看看是不是只输出一个100。
14:05
OK 100是不会输出的,输出个B等于100正确,那我稍微改一改,同学们看看能否答上,答上来哈,能否答上来。呃,我把这个改成。大禹。请同学们思考,会说出什么?请同学们思考会说出什么?如果我把这个A改成A大于五,我先问大家第一个问题A。大不大于五。A大,但是肯定大于十,大于五的肯定,所以他就已经为真了,为处。那么问大家,他一旦为处,后面还有没有必要去执行?没有必要了,因为我们前面讲过逻辑或它的运算规则是只要这个条件有一个为真就可以了,因此呢?他知道,因为你这个已经为真了,后面执不执行其实。
15:00
都一样。是不是都是为真,没有必要再执行了,你你后面这个到底是为真为假,并不影响整个这个if。最后这个结果,因此呢,他就不至于了,所以说这个地方我们又提出一个观点,什么呢叫做说明,我们在这改一下,说明一下。说明。第一点在进行,在进行这个逻辑语的时候,逻辑与时,如果有第啊如果第一个条件为,为什么呢?如果前面这个条件,或者叫啊第一个条件行第一个条件为真。为真。为真则则不再执行,不再执行后面的条件,整个结果,整整个整个这个结果为什么呢?为出。OK,因为你只要有一个微针就行了嘛,所以说这个现象呢,我们也也有个叫法,这个该现象。
16:04
该现象称为什么呢?短路现象叫什么呢?叫做逻辑。逻辑或短路现象。段路。短路现象,因此,因此同学们注意听,有些书上呢,把这个逻辑或也直接叫做短路逻辑,或因此有些书。有些地方啊,也称为,因此逻辑或逻辑或也称为。也称为什么呢?称为短路逻辑或明白了,所以你看现在我这样一执行,第一个已经为真了,后面不执行了,那么会怎么样呢?他首先会输出OK100。这个肯定会输出,然后B呢,因为没有被加加,所以说这边会输出什么呀,同学们输出99。能理解了,不好,我运行一下给同学们看一下是不是这样子的跑起来。
17:02
跑起来过后呢,我们看到这个结果跟我们分析的应该一样,输出了OK 100B等于99正确,紧接着我们再来看一个小案例,这个案例呢是罗辑飞的案例,罗辑飞其实特别简单,他是这样子的。比如说大家看我这有个乘积为100。然后呢,我让这个时靠跟99比较,显然100呢是大于99的,因此这个res就为真,为真的话呢,这个res同学们想它是等于多少,等于一,这个能理解不?那为真嘛,我们刚才不是讲了吗,非零为真,而且呢,默认是用一来表示的,所以说这个就就为真,那么1IFRS大家看。Res,现在是不是为真了?魏真,所以他会,他会不会输出这句话哈,汤姆会不会输出,肯定会输出。肯定会输出,那么现在呢,我在后面又加了一个if逻辑,逻辑非res,这个这个hello Jack会不会输出呢?不会,因为你这个res本身视为真,然后呢,我给他来来一个非整个这个结果就为假了。
18:12
为为假钱就不尽到我们的一句话,因此这个呢就不输出。好吧,我给大家运行一下,大家看一下结果就可以了,好不好。好,我同样呢,把刚才这个地方也给他注销一下,待会我们再整理代码,我们刚才已经分析过了,会输出hello,汤姆,但是不会输出Jack。我们执行一下,跑起来。我们看到的确会输出什么呢哈,他那我再改一改,同学们看这个结果能不能答上来哈,给我改成这个。大于。199吗?显然这个不大于,不大于的话呢,此时此刻这个res其实等于零的。是不是等于零呢?它一旦等于零,零表示甲,所以这个呢不会输出。
19:01
那么但是他取了一个反,这边就表示真了。因此呢,这次他应该输出是hello Jack,而不是hello汤姆了,我们再运行一下。跑起来我们看这个结果呢,跟我们分析的应该是一样,好杰题好的同学们,那关于我们这一个逻辑运算符的几个案例应用案例就先给大家讲到这里,大家好好的体会一下我们刚才讲的这几个题对不对,尤其同学们要注意在进行逻辑语约的时候有一个短路现象,在进行逻辑或的时候呢,也有一个短路现象。明白了。同学们,关于这一讲,我们就先给大家讲解到这里。
我来说两句