求帮忙解答运算符的运算问题

来源:百度知道 编辑:UC知道 时间:2024/07/09 06:56:32
int a=1,b=10,c=1,x;
x=a&&b||++c
printf("%d,%d\n",x,c);

我算出来
x=1 c=2

正确答案是1,1

请问这是怎么回事?

还有

int x=5;
x+=x—=x+x
printf("%d\n",x)

自右向左运算

x+=[x—=(x+x)]

最后是x+=-5

我算的最后答案是5

为何最后答案是-10?
wangsl1978比较浅显...

谢谢 tralon

你的第一个答案我一下就明白了

一、
a&&b 已经是‘真’了,就不执行后面的 或运算了。所以c 不变。
二、
先算
x—=x+x
x = x - (x + x)
x = -5
然后
x+=x
x=x+x
x = -5+-5 = -10

对于x=a&&b||++c ,因为x=a&&b为真;因此x=a&&b||++c一定为真。所以系统只运算x=a&&b;
对于int x=5; x+=x—=x+x
第一步:x+=[x-=(x+x)->x+=[x=x-2x](此时x=5)接着x+=(x=-x)(此时将-5辅给x)
第二步:x=2x(x=-5)

第一个题||后面的++c不会执行到,因为是或操作。
第二个题是从右向左计算没有问题,但在第一步x+x之后x已经被赋值为10,因为+=和-+也是赋值操作,所以相当于10+=10-=10,到最后就是10+=0.