C中 的 ++ 问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 11:05:07
rurbo2.0 比如 int a=1,b; b=a+1+(++a); 值为5 ,看得出先计算++a;
如果 b=a+1+(1>0||++a); 则值为3 ; 请解释下: 第一个表达式中,第一个a=2,也就是 b=2+1+(2); 是先计算++a的, 但 第二个表达式中:a=1 也就是b=1+1+(1),++a 不是先算, why ?
还有个表达式b=a+1+2>1||++a; 值为1 why?

b=a+1+(++a);
从右向左运算,现算 ++a,相当于 2 + 1 + (2) = 5

b=a+1+(1>0||++a)
这个也是先计算 (1>0||++a)。但是因为 1 > 0,整个表达式为真,后面的 ++a 就不计算了,而这个 || 表达式的值为1(True)。
相当于 1+1+(1) = 3;
你要是把它改成 b=a+1+(1>2||++a) 结果就应该等于 4 了

b=a+1+2>1||++a;
最后这个实际上相当于 (a+1+2) || (++a)。现算前面的 a+1+2,结果大于0。因此整个表达式为真,值等于1。++a根本就没有被计算。

因为算术运算的优先级别高于关系运算的

是不是 1||2 =0 阿
最后一个式子 先算的是a+1+2>1

int a=1,b; b=a+1+(++a); 计算机在执行这一语句时,对其进行一次扫描,以确定a 的值,此时得到a 的值为2,再进行总的运算,结果就是2+1+2=5。
b=a+1+(1>0||++a);计算机在执行这一语句 时,先算括号内的表达式:(1>0||++a) 逻辑或(||)有一个运算规则就是如果左边的表达式为一个非零值的话,那么就不对右边的表达式进行运算,那么a 的值就是1而不是2,因此b=a+1+(1>0||++a);的结果就是1+1+1=3。