(n++)+(n++)+(n++)与(++n)+(++n)+(++n)的区别

来源:互联网 发布:照片墙拼图软件 编辑:程序博客网 时间:2024/04/28 01:25

 在学C语言开始的时候我们都会遇到求到给任意整数值(n++)+(n++)+(n++)与(++n)+(++n)+(++n)的值。

首先,我们复习下运算符++n与n++的区别。

运算符++n是n自加1之后再参与运算,而n++是n先参与运算,再自加1,再参与其他运。

假设n=5;

(n++)+(n++)+(n++)一般我们第一反应就是6+6+6=18;但是实际上结果确实是18;但是运算结果不是这样的,正确顺序是5+6+7=18,。为什么是这样呢?

我们一步步来计算:

首先计算(n++)+(n++),我们知道括号的运算等级优先于+和++,n++又是n先参与运算,再自加。所以(n++)+(n++)的应该结果是10,但实际是11。

这个地方运算符的右结合性要高于运算等级的限制,所以变成先把括号里n的值先参与括号外+的运算,然后第一个括号里n++之后n变为6给第二个括号里n,

然后第二个括号里n先参与括号外运算,然后n自加给第三个括号里n,以此类推,实际数值计算就是5+6+7,如果在后面再加一个(n++),数值运算就变成了5+6+7+8。

(++n)+(++n)+(++n)我们先进行(++n)+(++n)这一部分吗,这个时候编译器会先进行完两个括号里的所有自加运算,然后在进行括号外的+运算,进行两次自加运算,

n值变为7,此时变成了7+7=14;然后在进行第三个括号里的(++n)自加运算,n值变为8,就成为7+7+8=22,如果在后面在加上一个(++n),就变成7+7+8+9=31,以此类推。

终上所述,我们发现,这种运算的难点在意我们不知道开始的第一步的运算,以至于后面的计算就难以进行,建议大家还是打开编译器多敲几遍就知道了。

附上代码

#include<stdio.h>
int main()
{
    int m=5,n=5,p,q;
    p=(m++)+(m++)+(m++);
    q=(++n)+(++n)=(++n);
    printf("%d %d\n",q,n);
    printf("%d %d",p,m);
    return 0;
}

m,n变量都是全局变量。

原创粉丝点击