您的位置:首页 > 编程语言 > C语言/C++

【C/C++】自增运算符++详解

2016-05-03 15:30 459 查看
关于 a = 2 * a++ *(3 –  ++a)的运算过程分析:

将以上源代码进行反汇编之后的结果如下:

       int a = 2;

00C313DE mov         dword ptr [a],2  // a = 2;

       a = 2 * a++*(3 - ++a);

//进行++a运算 

00C313E5  mov        eax,dword ptr [a] 

00C313E8 add         eax,1 

00C313EB mov         dword ptr [a],eax 

// 进行3 – (++a)运算

00C313EE  mov        ecx,3 

00C313F3 sub          ecx,dword ptr [a] 

// 进行2 * a运算

00C313F6  mov        edx,dword ptr [a] 

00C313F9 shl           edx,1 

// 进行2 * a * (3 - ++a)运算

00C313FB  imul        edx,ecx 

00C313FE mov         dword ptr [a],edx 

// 进行(2 * a * (3 - ++a))+1运算

00C31401 mov         eax,dword ptr [a] 

00C31404  add         eax,1 

//a = (2 * a *(3 - ++a)) +1 运算结果赋值给a

00C31407 mov         dword ptr [a],eax 

下图为整个运算的详细图解:



根据以上分析,可得出a = 2 *a++ *(3 –  ++a) 整个运算过程如下:

1、 由于()优先级最高,所以先计算括号里面的表达式,括号里面++a的运算优先级高于" - ",所以最先计算a = a + 1;然后计算(3- (++a))。

2、 由于" * "优先级相同且为左结合性,所以先计算2 * a,然后计算(2 *a)* (3 - ++a)。

3、 a++为后自增,所以最后计算((2 * a)* (3 - ++a)) + 1,所以最终结果为1。

结论:前自增运算(++a),先将a的值+1,然后将+1后的a值参与运算试的运算;后自增运算符(a ++),在进行自增运算时会先计算运算试的结果然后再将整个运算结果+1,而不是a参与运算后a的结果立即+1。

思考:

请计算出以下表达式的输出结果:

a = 2 * (a++) *(3 - ++a);

a= 2 * a++ *(a++ * (3 - ++a))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自增运算符