哦,这个我知道,书上和老师都会提到这个问题的,在逻辑运算中会出现短路的现象,例如amp;amp;并列语句当中如果第一个为假的话就结果直接为零,不执行后面的运算;||或语句中如果第一为真结果直接为1,不执行后面的语句这样你就明白为什么第一道题中的n不是0而是原来的值2,第二道题仲的y是3而不是4,第三道题仲的b是0而不是1啦
(magt;b)amp;amp;(ncgt;d)结果该是0因a不大于bm就为假后面的C++就不运算了
第二个是对的
++a所以A1
后面++b不执行
然后++c;
应该没错,典型的短路求值
分析一个吧:
(magt;b)amp;amp;(ncgt;d)
agt;bfalse
magt;bm0
(magt;b)整个表达式结果也是0
因为左边表达式结果为假,根据短路求值规则,右边不用求解,所以n不变
结果是:2
5gt;6是假,所以amp;amp;的结果肯定是假,右边的ncgt;d就没有运算了,所以n仍为2
同理++x4,为真,所以||结果肯定是真,右边的++y没有运算
还是同理,++a1gt;0为真,所以++b没有运算,++c算了
包括:1amp;amp;逻辑与2||逻辑或3!逻辑非
逻辑运算符用于对包含关系运算符的表达式进行合并或取非
对于使用逻辑运算符的表达式,返回0表示假,返回1表示真关于逻辑运算符的解释
请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将写成是错误的
假设一个程序在同时满足条件alt;10和b7时,必须执行某些操作应使用关系运算符和逻辑运算符与来写这个
条件的代码用amp;amp;表示与运算符,该条件代码如下:
(alt;10)amp;amp;(b7);
类似地,或是用于检查两个条件中是否有一个为真的运算符它由两个连续的管道符号(||)表示如果上例
改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下:
(alt;10)||(b7);
第三个逻辑运算符非用一个感叹号(!)表示这个运算符对表达式的真值取反例如,如果变量s小于10,程序
程序需执行某些操作,则条件代码如下:
(slt;10)
或
(!(sgt;10))//s不大于等于10
关系运算符和逻辑运算符的优先级一般都低于算术运算符例如,5gt;4+3的计算与5gt;(4+3)运算符是一样的,即
先计算4+3,再执行关系运算此表达示的结果为假,即,将返回0
下面的语句
printf(%d,5gt;4+3);
将输出0
可以总结为:amp;amp;的结果是真真为真||的结果是假假为假
(magt;b)结果为0
(ncgt;d)结果为1
(magt;b)amp;amp;(ncgt;d)结果为1
n2
在c语言中amp;amp;这个运算符的优先级要高于||,所以先算yamp;amp;z0之后算x||01,所以输出的是1
c语言中的逻辑运算符就三种,amp;amp;与||或!非,它们的优先极顺序为非,与,或它们含义如下,!:当操做数为真时,结果为假,反之也成立,并且它的优先极也最高,因为只有它是单目运算符,amp;amp;:只有当两个操做数都为真时,结果才为真,否则为假||:只有当两个操做数都为假时,结果才为假,否则结果为真除了这些,逻辑运算符还有几点应注意,!运算符是右结合性,amp;amp;和||是左结合性在逻辑表达式求解时,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求表达式的解时,才能执行该运算符如补充:aamp;amp;bamp;amp;c只有a为真(非0),才判别b的值,只有a和b都为真情况下才判断c的值,只要a为假,就不用判断b和c的值了a||b||c只要a为真就不必判断b和c,只有a为假,才判断b,a和b都为假才判断c
是否可以解决您的问题?
x||yamp;amp;z先算这个yamp;amp;z为0那么1||0结果为1
最后x1所以是1
main()
{intx,y,z;
xyz0;
++x||++yamp;amp;++z;
//因为amp;amp;的运算级高于||而且运算顺序都是从左到右,所以当执行||前面的++x内容非零以后,后面的两项不管是什么值都不影响结果,所以后面的程序就不编译了
//这句话等同于++x的效果,得到X1y0z0
printf(x%d\ty%d\tz%d\n,x,y,z);
xyz0;
++xamp;amp;++y||++z;
//因为amp;amp;的运算级高于||运算顺序都是从左到右,所以先计算++x和++y,当这两项运算结果非零,不管||后面值是什么都不影响结果,所以后面的++z就不编译了
//这句话等同于++xamp;amp;++y的效果,得到X1y1z0
printf(x%d\ty%d\tz%d\n,x,y,z);
xyz0;
++xamp;amp;++yamp;amp;++z;
//amp;amp;的运算顺序是左到右,而且不存在前面的执行以后后面的值不管是否执行都不影响语句结果的情况,所以++x++y++z都运算
//得到X1y1z1
printf(x%d\ty%d\tz%d\n,x,y,z);
xyz-1;
++xamp;amp;++yamp;amp;++z;
//amp;amp;的运算顺序是从左到右,当先执行了++x以后,表达式的值不管y和z是什么值结果都是0,所以后面的部分不编译运算
//等同于++x,得到X0y-1z-1
printf(x%d\ty%d\tz%d\n,x,y,z);
xyz-1;
++x||++yamp;amp;++z;
//amp;amp;的优先级高于||,所以先执行++y,当执行了++y以后z的值就不影响++yamp;amp;++z的结果了,就不执行++z了,
//等同于++x||++y得到X0y0z-1
printf(x%d\ty%d\tz%d\n,x,y,z);
xyz-1;
++xamp;amp;++y||++z;
//同理等同于++x||++z得到X0y-1z0
printf(x%d\ty%d\tz%d\n,x,y,z);
}
哦,这个我知道,书上和老师都会提到这个问题的,在逻辑运算中会出现短路的现象,例如amp;amp;并列语句当中如果第一个为假的话就结果直接为零,不执行后面的运算;||或语句中如果第一为真结果直接为1,不执行后面的语句这样你就明白为什么第一道题中的n不是0而是原来的值2,第二道题仲的y是3而不是4,第三道题仲的b是0而不是1啦
这个简单,你知道C语言是有上向下一次运行的是把,你的程序可是简单的分析成以下的形式
main()
{intx,y,z;//定义变量x,y,z;
xyz0;//你给x,y,z赋了个初始值0;
++x||++yamp;amp;++z;//这是你的逻辑表达式其中++x等同于xx+1(赋值运算)之后的++y和++z同理,||和amp;amp;是逻辑运算符,这个语句就牵扯到了逻辑运算符的优先级:amp;amp;的优先级大于||而他们俩的优先级又大于赋值运算符的!
printf(x%d\ty%d\tz%d\n,x,y,z);//打印出来x,y,z的结果
}
优先级就是决定电脑先去执行那一部分,越高越先执行!之后你的语句就是这个上面这个形式的重复了希望我的解答能让你了解到逻辑表达式在系统是怎么执行的有什么不懂的再问哈!
下一篇 > :金蝶sql数据备份,金蝶kis商贸版怎么手动备份
还没有评论,快来抢沙发吧!
最新发现
相关资讯
金蝶sql数据备份,金蝶kis商贸版怎么手动备份
请您打开【帐套管理】打开【数据库】-【帐套自动批量备份】,点击新增方案,然后勾选需要备份的帐套,同时设置完全备份,增量备份时间间隔(即周期),然后再设置好备份文件存储路径,并设置好备份开始时间(一般建
2024-06-10 11:51:42
文件加密软件功能,有什么软件可以帮助加密文件和文件夹
强大的文件和文件夹加密软件(支持最新的vista操作系统),还具有彻底隐藏磁盘以及禁止使用或只读使用USB存储设备,数据粉碎删除等功能
2024-06-10 11:51:42
机器人占比算法,人的意识是某种权利吗
另外,对物质的定义也有问题试想像一下,假如在离我们遥远的星球上有高度文明的外星人社会存在,他们在定义物质时,还会说,物质是不依赖于人的意识的客观存在吗
2024-06-10 11:49:47
网关路由器猫,光猫和网关的区别
不用知道一些概念性的东西,按说明用就行了,具体用法是:从猫出来的网线接到路由器的WAN口,再从路由器的其他接口接网线到电脑就行,路由器的设置看说明书,网关就是192.168.1.1猫是将电话线或者光纤信号转成网线信号的
2024-06-10 11:48:31
宝马浴缸怎么设置温度,浴缸有两个水龙头,一个放热水,一个放冷水
其实,如果在冷车时就打开暖风,既得不到暖风又会延长暖车时间,所以一般在水温上来之前不要打开暖风开关,应该把调节温度的红兰开关拨到兰色那边,这样就把暖水开关关闭了等水温正常后再把调节温度的红兰开关拨到红
2024-06-10 11:44:25
新闻热榜
热门游戏
精彩专题