自加运算符问题
今早上遇到一个问题,原始代码是:程序代码:
#include <stdio.h> main() { int a=0,b=3; a=(b++)+(b++)+(b++); printf("a=%d\n",a); printf("b=%d\n",b); a=0,b=3; //变量a重新归零,b重新归3 a=(++b)+(++b)+(++b); printf("a=%d\n",a); printf("b=%d\n",b); }
这个代码根据分析结果应该是:
a=9
b=6
a=15
b=6
但是我用手机编译器(C4droid 用的linux下的G++编译器)运行结果为:
a=9
b=6
a=16
b=6
第二个a的值和想象的不一样,我认为可能是编译器的实现不一样,于是又用vs2013试了一下,结果:
a=9
b=6
a=18
b=6
这结果第二个a的值相差的更大
为了分析结果,我改了下代码:
程序代码:
#include <stdio.h> main() { int a = 0, b = 3; a = (b++) + (b++) + (b++); printf("a1=%d\t", a); printf("b1=%d\n", b); a = 0, b = 3; //变量a重新归零,b重新归3 a = (++b) + (++b) +(++b); printf("a2=%d\t", a); printf("b2=%d\n", b); a = 0, b = 3; //变量a重新归零,b重新归3 a = (++b) + (++b);// +(++b); printf("a3=%d\t", a); printf("b3=%d\n", b); a = 0, b = 3; //变量a重新归零,b重新归3 a = (++b);// +(++b) + (++b); printf("a4=%d\t", a); printf("b4=%d\n", b); a = 0, b = 3; //变量a重新归零,b重新归3 a += (++b); a += (++b); a += (++b); printf("a5=%d\t", a); printf("b5=%d\n", b); a = 0, b = 3; //变量a重新归零,b重新归3 a = (printf("b6_1=%d\t", ++b), b) + (printf("b6_2=%d\t", ++b), b) + (printf("b6_3=%d\t", ++b), b); printf("a6=%d\t", a); printf("b6=%d\n", b); }
电脑运行结果:
a1=9 b1=6
a2=18 b2=6
a3=10 b3=5
a4=4 b4=4
a5=15 b5=6
b6_1=4 b6_2=5 b6_3=6 a6=18 b6=6
我就不懂了,4+5+6怎么就等于18了,求指点