C++程序设计中,&&和||的优先级问题

这个程序里面,为什么不先执行(++y)&&(++x)?程序先判断了x>y,然后后面的那部分表达式就被短路了。&&不是比||优先级高吗?请问怎么解释。

&&是比||的优先级高,但是这里不一定就是先计算
这句输出里的式子可以理解为((x>y)||((++y)&&(++x))),这样就可以看出来,只要||左边的式子为真,后面的是不执行的。
参考:http://ham.iteye.com/blog/198039追问

难道编译器不应该先判断右边的式子是否为真?

追答

不是啊,是先判断左边的式子,再判断右边的式子

||是在左边式子为假的情况下才判断右边的式子
&&是在左边的式子为真的情况下才判断右边的式子

追问

但是&&的优先级比||高啊…
没明白你的第一句话…难道不是先进行优先级高的运算吗…

追答

优先级高只是结合的吧,比如!的优先级比||的优先级高,a||!b你会认为是先算!b吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-03
C/C++在逻辑判断表达式上有个短路效应
A || B,当A为逻辑真时,整个表达式的值已经可以确定为真,B就不执行了
A && B,当A为逻辑假时,整个表达式的值已经可以确定为假,B就不执行了
这里x>y为真,所以后面的(++y)&&(++x)就不执行了。追问

当&&和||同时存在的时候,即 A || B && C 的时候,为什么不是先计算B&&C?

追答

如果A已经是逻辑真,就没必要再计算B&&C了。虽然&&的优先级比||高,用括号括起来看是这样:(A) || (B && C),A和B&&C是同等优先运行的表达式,按照从左至右的运行规则,先计算A,发现A为逻辑真后,B&&C就不执行了。

本回答被提问者采纳
第2个回答  2015-07-03
因为“>”的优先级比“&&”高

C++程序设计中,&&和||的优先级问题
&&是比||的优先级高,但是这里不一定就是先计算 这句输出里的式子可以理解为((x>y)||((++y)&&(++x))),这样就可以看出来,只要||左边的式子为真,后面的是不执行的。参考:http:\/\/ham.iteye.com\/blog\/198039

C语言中&&和||的优先级问题
1、||和&&优先级相等,且都是从左往右运算 2、在出现||和&&的语句中,并不对a++进行运算,只判断它的初值。当然,这条语句结束后,涉及判断的表达式就会进行相应的运算(如:a++)。3、在&&运算中,如果&&前面的逻辑值为0(如:令a=0; a++&&b++,此时,a还没有进行++运算,仍为0。但是在...

C++中&&运算问题
a=1,b=2,c=2 &&从左到右的优先级.(c=a)!=b,c=1,ab不变 a==b,ab不变 c=b,ab不变c=2 === 上面说错了.应该是这么回事.a=1,b=2,c=1 &&从左到右的优先级.(c=a)!=b,c=1,ab不变 不等式的结果是1.a==b,ab不变 不等式的结果是0,不再向下判断.长时间没碰这么底层...

c++中&和|的优先级别是怎样的呢?
第十一级:逻辑与运算符【&&】第十二级:逻辑或运算符【||】第十三级:条件运算符【?:】第十四级:赋值运算符【= += -= *= \/= %= >>= <<.= &= |= ^=】第十五级:逗号运算符【,】

c语言中&&与||的优先级
&&和ll运算符都是同一优先级的,是自左向右结合运算,该程序的运算结果为1即为真,因为++all++b结果为1,再投行&&++c两边都为真所以整个逻辑表达式为1 a=2,b=1,c=1

&&和||的优先级谁高
优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、...

C++中&&的优先级比||的要高 但是为什么下面程序运行过程是这样的 x=2...
这个(x>y)||(x>0)&&(y>0):放入x>y的值进入存储器 存储器:1 判断存储器末端的1是否为真(是) 存储器:1 取出存储器末端的数1 存储器空 (若为假(存储器末端为0)放入x>0的值进入存储器 存储器:0 1)(继续。。。)...

c++运算符的优先级顺序
=)相等运算符(==、!=)按位与运算符(&)按位异或运算符(^)按位或运算符(|)逻辑与运算符(&&)逻辑或运算符(||)条件运算符(?:)赋值运算符(=、+=、-=、*=、\/=、%=、&=、^=、|=)说明:同一优先级的运算符,运算次序由结合方向所决定。需要注意的是,C++中的运算符优先级是...

c++中的&&与||的简单应用与执行顺序
1、&表示按位与操作。2、&&表示逻辑与的意思,即为and。区别二:程序执行的时候不同 1、当运算符&&两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。比如 12&&23的结果就是1,12&&-1 的结果是1,123&&0的结果就是0 2、我们通常使用0x0f来与一个...

C++中各类运算符的优先级
在C++中,运算符的优先级和结合方向对表达式的计算结果至关重要。各类运算符的优先级可以按照以下直观的顺序理解:首先,括号([]())的运算优先级最高,它们用于界定和改变运算的范围,然后是成员运算符(.和->),用于访问对象的属性和方法。其次,单目运算符(++、--、+\/-、指针运算*、&)占据第...

相似回答