C++逗号运算符问题

int x=0, y=0;
1? ++x,++y: --x,--y;
cout<<x<<" "<<y<<endl;
运行后x=1 y=0(为什么y不等于1?)
int x=0, y=0;
0? ++x,++y: --x,--y;
cout<<x<<" "<<y<<endl;
运行后x=-1 y=-1


#include<iostream>
using namespace std;
int main(){
   int x=0, y=0;
   1? ++x,++y:--x,--y;
   cout<<x<<" "<<y<<endl;
   
   x=0, y=0;
   0? ++x,++y:--x,--y;
   cout<<x<<" "<<y<<endl;
   system("pause");
   return 0;
}

运行结果:


c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,(a=3*5,a*4)的值是60,原因在于赋值运算优先级高于逗号表达式。


首先明确逗号表达式的优先级最低。

对于

1? ++x,++y:--x,--y;

执行完++x,++y后又执行了第二个逗号后的--y,

整个表达式相当于

(1? ++x,++y:--x),--y;

所以y的值为0;

对于

0? ++x,++y:--x,--y;

直接执行了--x后执行了第二个逗号后的--y,

整个表达式相当于

(0? ++x,++y:--x),--y;

所以x,y的值均为-1.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-12
int x=0,y=0;
1?(++x,++y):(--x,--y);
printf("x=%d,y=%d\n",x,y);

用上述方法表达,结果就是:x=1 y=1

第2个回答  2015-01-12
分开写就好了,合并写就不行:
x==0?++x:--x;
y==0?++y:--y;
第3个回答  2015-01-12
你好,我来说一下 1?++x,++y:--x,--y 的运算顺序你就知道了.
先执行的是1?++x,++y:--x 然后执行--y,所以y被加了1,但后面又减了1,所以还是为0 .

--y 这一步并不是条件表达式(<表达式1>?<表达式2>:<表达式3>)的内容 ,所以不管判断结果怎样,--y都是要执行的.
如果像楼上回答的那样在两边加上括号,那么--y就属于表达式里的内容了,它就会根据判断结果执行了.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网