int a = 0;a+=a++;此时a值为多少?如何计算的

int a = 0;
a+=a++;
System.out.println(a);
这个输出的结果是0,请详细解释运算过程

a+=a++;
分解a=a+a++;
此时a为0,由于a++为先执行运算后自加,所以此时的表达式可以看成是a=0+0,
这时又涉及到运算符优先级问题,=号为最低等级,所以先执行了a++,但是这个a++并不会影响最后的结果了,因为上面的表达式已经出来了,最终a又会被赋值成0+0的结果,所以还是0
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-01
a+=a++未定义的。
就是说标准未明确规定它的结果。于是会根据不同编译器各自有不同的结果。

你可以在用c语言在vc或者dev 下编程看看它的结果,没记错的话应该是1.
而Jdk执行过程应该
a++,由于右边的++是先执行运算后自加
所以就执行a+a(结果是0),结果为0,然后执行++(a这个时候是1),最后执行=(把前面a+a执行的结果再次赋给a,那么a就是0),所以最后结果是0。
第2个回答  2010-07-01
主要是a+和+a有区别。
在计算时,a+先执行完运算,再把a的值加1
而+a则正好相反,是先把a加1,再执行运算的

题中a初始值为0
a+=a++;这个语句相当于a=a+(a++),小括号中的值为0,所以等式右边的值0+0为0,所以输出为0。
第3个回答  2010-07-01
int a=0; 定义变量并赋初值,此时变量值为初值0
a+=a++; 这是一个赋值语句:a=a+a++,等号右边第一个a值为初值0,第二个a也为初值0,此时a 值变为2。但是赋给左边a的值为表达式a+a++的值,因此a=0.
因此输出结果为0
第4个回答  2010-07-01
a+=a++
就相当于a等于a加上a++
对于a++ 由于是后置++ 会先输出原始值 再加一
所以会先输出0
结果就是 a=0+0
第5个回答  2010-07-01
这是一个java中递加很特殊的现象。

a+=a++;貌似等同于a+=0;a+=1;

a+=a++;中,等号左边和右边的运算结果,分别被保存到两个不同的内存领域中,
而你打印之后,只输出了等号左边,也就是在最初定义的int a,所以输出结果是0。
a++的结果,以普通方式从代码中无法访问。

此种现象只能用这个理由来解释

一个接近的例子,如下,
z=y++*10的结果等同于z=y*10;y=y+1

int a = 0;a+=a++;此时a值为多少?如何计算的
此时a为0,由于a++为先执行运算后自加,所以此时的表达式可以看成是a=0+0,这时又涉及到运算符优先级问题,=号为最低等级,所以先执行了a++,但是这个a++并不会影响最后的结果了,因为上面的表达式已经出来了,最终a又会被赋值成0+0的结果,所以还是0 ...

若有int+a=0,则语句printf("%d\\n",a++)结果为?
根据题目中的条件,已知int+a=0,即a是一个整型数,并且满足a的值加上某个整数可以得到0。在C语言中,printf("%d\\n",a++)指的是先输出a当前的值,并在输出后将a的值加1。因此,在执行这条语句时,将会按以下步骤进行:先计算并输出a的当前值,即0;然后将a的值加1,此时a的值变为1。因...

int a=0;a=a++;System.out.print(a); 为什么输出0?
a++与++a执行顺序是不一样的,++a是先自增,再赋值:而a++是先赋值,等到第二次执行时才自增。所以你把上面的a++改成++a输出的结果就是1

a+=(a++)
回答量:364 采纳率:0% 帮助的人:389万 我也去答题访问个人页 关注 展开全部 a+=(a++),a是先使用在自加,既有:第一步:a=a+a,第二部:a=a+1;举例1:int a=1;cout<<a+a++<<endl;输出结果:2举例2:int a=1;a+=(a++);执行这步后,马上再执行a=a+1cout<<a<<endl;输出结果3; ...

c++中 int a = 0; a = a++ + a;这条语句怎么理解
在两个顺序点之间多次修改同一个对象的值,属于未定义行为。a = a++ + a这个表达式就是未定义行为,它的值是未知的。这样的表达式十分糟糕,一定要避免出现。

int a=4;a+= (a++); a=?
a+=(a++)等价于a=a+(a++)=(4+(a++))a++得到a=5;所以a=4+5=9 a+=x;x是a++时;a++返回的值是a,就是先把a是4放过去,再a自加一,再把4和5相加等于9 x是++a时;++a先自加,再把5放过去,最后5加5等于10;

C语言中若a=0则a++=?
例如 int a=0,b;b=a++;然后输出a,b 则b的值为0,a的值为1 因为,此时,在算式中先返回a的原来的值,然后再在算式整个计算完成之后将a自加一。所以这个表达式值为0,不是1 这个算式a的值运行后变成1,b不变。

int a=0;a=(++a)+(++a)+(++a);a=?
int y = (++i) + (++i) + (++i);整个的语句里面,只有1个Sequence Point,也就是语句的结束点,对于右边表达式的计算顺序没有任何的规定,显然,各种编译器都可以按照他们觉得“舒服”的方式来进行计算,这样的代码,如果只要求在特定的平台或者编译器运行,那么带来的可能只是可读性差的问题,但...

int a = 10;a += a++;System.out.println(a);为什么是20
public class Test { public static void main(String[] args) { int a = 10; \/** * 第一:a += a++;相当于a = a + a++; * 第二:a++特点是:先运算后自增,在此句中它的值是10 * 第三:a = 10 + 10;最后打印的是赋值后的这个a的值:=20 *\/ ...

C++自加问题: int a=0; printf("%d%d%d",a++,a++,a++,a++); 输出:321...
printf函数的输出顺序是从右到左, 并且本语句所用的自加 加号均在a的后面,故先输出a 再自加。所以 第一次 a=0 a++=1 第二次 a=1 a++=2 第三次a=2 a++=3 第四次 a=3 a++=4 故 输出 3210 输出后a的值已经变成4 ...

相似回答