自增运算
#include <stdio.h>int main() {
printf("");
int i = 3,x = 0;
x= (++i)+(i++);
printf("%d",x);
printf("\n");
int y =3,z=0;
z= (++y);
z= z+(y++);
printf("%d",z);
return 0;
}
这个自增 为啥 上下两行结果不一样啊 x= (++i)+(i++);
这句结果x=2i+1 z= (++y);
z= z+(y++);
整理一下不就是
z=(++y) + (y++);
x= (++i)+(i++);
这两个不就是变量的名称不一样吗? ++y:先进行自增再参与运算
y++:参与运算后再自增 庸人误我 发表于 2020-12-3 18:45
z= (++y);
z= z+(y++);
整理一下不就是
不一样,你把x改成Z那个格式,就和Z一样了。 拆开两句和一句的运算顺序不同,然后自增结果就不一样。 真的小白 发表于 2020-12-3 19:03
++y:先进行自增再参与运算
y++:参与运算后再自增
这个才是正解{:1_921:} Java中是一样的 首先你对自增运算符的理解并没有错,而是没有理解全,++i和i++的区别有两层含义,第一,运算顺序不同,不做赘述,第二,++i属于左值,i++只能是右值
z=8很好理解,我就不赘述了,为什么x=9呢?
x=(++i) + (i ++);
编译器先从左到右优先计算括号里的算式
第一步计算完相当于:
i = i+1;
x = i + (i++);
第二步计算完相当于:
x=i + 4;此时i经过自增已经变成了5
所以x=5+4;
如果讲到这里还没明白的话,就需要回头看一下左值和右值的区别了,在 c 语言中,通常来说有名字的变量就是左值(如上面例子中的 x, z和++i),而由运算操作(加减乘除,函数调用返回值等)所产生的中间结果(没有名字)就是右值比如++i,
所以第一个式子x相当于计算i + 4,此时i已经等于5(计算i++时产生中间值,然后i自增加1)
而第二个式子z的值相当于计算4+4. 即使此时i也等于5,然而已然和z的值没有任何关系了
是的,我测试了,Java里面是一样的。
页:
[1]
2