首页 新闻 会员 周边 捐助

++ 与 = 的运算顺序问题

0
[已解决问题] 解决于 2012-01-02 16:56
#include <stdio.h>
int main()
{
int integar = 0;
int temp;
temp = integar++;

  printf("temp = %d\n",temp);
  printf("integar = %d\n",integar);

    return 0;
}

执行结果:

疑问:

++ 的运算符优先级要高于 = 

但是为什么先执行 

temp = integar
后执行
integar++
呢?
问题补充:

++i是先操作后赋值(j=++i;那么i=i+1,j=i)

i++是先赋值后操作(j=i++;那么j=i,i=i+1)

这个我也知道的

能解释下原因吗?

比如说从运算符优先级的角度说一下。。。

多谢!

WangCT的主页 WangCT | 初学一级 | 园豆:186
提问于:2011-12-27 09:06
< >
分享
最佳答案
1

这是++i和i++的区别:

相同点:二者都相当于i=i+1;

区别:

++i是先操作后赋值(j=++i;那么i=i+1,j=i)

i++是先赋值后操作(j=i++;那么j=i,i=i+1)

yanzhe | 菜鸟二级 |园豆:213 | 2011-12-27 11:49

这个我也知道的

能解释下原因吗?

比如说从运算符优先级的角度说一下。。。

多谢!

WangCT | 园豆:186 (初学一级) | 2011-12-28 13:22

@WizardCT: 从运算符的优先级角度说我还真说不清,不过你可以看看反编译的过程。

int i = 10;
int j;
j=i++;

的反编译代码为

IL_0001:  ldc.i4.s   10
IL_0003: stloc.0
IL_0004: ldloc.0
IL_0005: dup
IL_0006: ldc.i4.1
IL_0007: add
IL_0008: stloc.0
IL_0009: stloc.1

这个是先执行dup,后执行add

int i = 10;
int j;
j = ++i;
的反编译代码为
IL_0001:  ldc.i4.s   10
IL_0003: stloc.0
IL_0004: ldloc.0
IL_0005: ldc.i4.1
IL_0006: add
IL_0007: dup
IL_0008: stloc.0
IL_0009: stloc.1



这个是先执行add后执行dup

yanzhe | 园豆:213 (菜鸟二级) | 2011-12-28 15:54
其他回答(5)
0
#include <stdio.h>
int main()
{
int integar = 0;
int temp;
temp = ++integar;

  printf("temp = %d\n",temp);
  printf("integar = %d\n",integar);

    return 0;
}
这样写就好了
diorlv | 园豆:259 (菜鸟二级) | 2011-12-27 09:29
0

前置++,后置++,规定的逻辑算法就是这样的

ERS | 园豆:728 (小虾三级) | 2011-12-27 09:38
1

++i或者i++ 都影响 i这个变量,

 

但是如果 赋值操作的话,情况就变了:

int i=1;

s=++i;//S=2,i=2

int i=1;

s=i++;//S=1,i=2

Anleb | 园豆:208 (菜鸟二级) | 2011-12-27 10:34
0

你这个代码是没有什么歧义性的,具体原因这是语言的语法规定,所以真没什么好解释的,去看看讲c、c++的教材就可以了。

hoodlum1980 | 园豆:573 (小虾三级) | 2012-09-13 08:31

一堆废话!

少在这不懂装懂

支持(0) 反对(0) garbageMan | 园豆:313 (菜鸟二级) | 2012-09-13 16:54
0

优先级(和结合性)与执行次序是两回事。

 temp = integar++ 这个表达式的含义是(根据优先级)

 temp = (integar++)

它说明的是++的运算对象是integar,以及把(integar++)这个表达式的值赋给temp。

表达式(integar++)的值就是integar (0),且++运算要求在求得这个值之后产生一个副效应(integar变为1)【求完这个值之后至“;”之前完成这个加1】

因此temp被赋值为0,在“;”之后查看integar的值会发现其值为1.

garbageMan | 园豆:313 (菜鸟二级) | 2012-09-13 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册