(++a + ++a) 等于多少?

  • 一、自增(自)运算符介绍(以自增为例)
  • 二、两个自加(自)变量的计算
    • 1. 当 a = 1时,( a++ 加 a++ )的值是多少
    • 2. 当 a = 1时,( a++ 加 ++a )的值是多少
    • 3. 当 a = 1时,( ++a 加 a++ )的值是多少
    • 4. 当 a = 1时,( ++a 加 ++a )的值是多少
  • 三、两个自加(减)运算符 计算原理纠正
  • 四、多个自加(自减)变量的计算
    • 1. 当 a = 1时,( ++a 加 a++ 加 a++ )的值是多少
  • 五、多个自加(减)运算符 计算原理纠正
  • 六、我多说一嘴

一、自增(自)运算符介绍(以自增为例)

自增自减运算符顾名思义,不需要别的参数,就可以自己 +1 或 -1 。它们在C语言中大量使用,且使用非常灵活(还是重要考点),因此,需要重点理解。

++ : 自加运算符,连续两个 ” + ” 组成,可放在变量前( ++a )或放在变量后( a++ )进行运算

前置自增运算符,在运算时,先对变量取值,再进行 +1 操作。如下所示,经过 a++ 后,先将取到的 a 的值打印,再自加 1 。

// 后置自增运算符(a++)int a = 1;printf("%d", a++ );printf("%d", a);


前置自增运算符与后置相反,在运算时,先进行 +1 操作,再对变量取值。如下所示,经过 ++a 后,先自加 1 ,再打印的 a 的值 2 。

// 前置自增运算符(++a)int a = 1;printf("%d", ++a );printf("%d", a);


以上就是最最最基本的,单个自增(自减)运算符的计算介绍。

二、两个自加(自)变量的计算

一个自加(自减)运算符只需要注意 ” ++ ” 在前还是在后即可,那么,两个或者多个呢?本章节,将详细介绍两个自增(自减)运算的过程。

1. 当 a = 1时,( a++ 加 a++ )的值是多少

按照计算关系顺序而来,从左到右计算,从左边的 a++ 开始,先取 a 的值为 1 ,再a = a +1 ,此时第一个 a++ 的值为 1 ,但a的值已经从 1 变为 2 ,
再进行右边的 a++ 时,由于 a = 2 ,取到的 a 的值为 2 ,随后再进行自加操作;
因此,当 a = 1 时,( a++ 加 a++ )的值是 1 + 2 = 3。

// a++ 加 a++int a = 1;printf("%d\n", a++ + a++ );// a = 1 + 2 =3printf("%d", a);// a = 3

2. 当 a = 1时,( a++ 加 ++a )的值是多少

同理,左边的 a++ 先取值为1,再进行自加,此时 a++ 的值为1,但 a 的值已经变为2;
当进行右边的 ++a 操作时,先进行自加1,再取值,此时a = a + 1 = 2 + 1 =3。
因此,当a = 1时,( a++ 加 ++a )结果是 1 + 3 = 4

// a++ 加 ++aint a = 1;printf("%d\n", a++ + ++a );// a = 1 + 3 = 4 printf("%d", a);// a = 3

3. 当 a = 1时,( ++a 加 a++ )的值是多少

对于上式,从左往右顺序计算,首先计算 ++a ,即先自加1( a = a +1 = 1 + 1 = 2 ),再取值,然后再对右边进行计算;
此时, a = 2, a++ 是先取值再+1,所以取值 2 。
因此, 当a = 1时,( ++a 加 a++ )的值是 2 + 2 = 4

// ++a 加 a++int a = 1;printf("%d\n", ++a + a++ );// a = 2 + 2 = 4 printf("%d", a);// a = 3


什么!为什么不是 4 ” />4. 当 a = 1时,( ++a 加 ++a )的值是多少

对于上式,从左往右顺序计算,首先计算 ++a ,即先自加1( a = a +1 = 1 + 1 = 2 ),再取值,然后再对右边进行计算;
此时, a = 2, ++a 是先 +1 再取值,所以取值 3 。
因此, 当a = 1时,( ++a 加 ++a )的值是 2 + 3 = 5。

// ++a 加 a++int a = 1;printf("%d\n", ++a + ++a );printf("%d", a);


什么?!也不是 5 吗?这是个什么道理呢?

三、两个自加(减)运算符 计算原理纠正

经过上面的实验,我们发现:

  1. a++ 的计算规律是符合规定的,即先取值,再 +1 ;
  2. ++a 的计算不符合规定,不是先 +1 ,再取值。

原来, ++1 在取值的时候,是最后一步做的,即存在 ++a 时,要对 a 的操作都结束,再取值。

借用2.3的例子:当 a = 1 时,( ++a 加 a++ )的值是多少。

// ++a 加 a++int a = 1;printf("%d\n", ++a + a++ );// a = 2 + 2 = 4 

首先进行 ++a 计算,a = a + 1 = 2,但是这时候并不取值(最后再取),而是接下去进行 a++ 的操作,即先取 a = 2 ,再 +1,此时 a = 3 。
注意,此时运算式子已经结束,需要进行最后一步,即 ++a 的取值,此时返回 3 。
所以打印的 ++a + a++ 的值为 5 。

同理,2.4也可得证。

// ++a 加 a++int a = 1;printf("%d\n", ++a + a++ ); 

首先进行左边 ++a 的操作,即,自加 1 ,此时 a 的值变为 2 ,但是不对 a 取值,而是再进行右边的 ++a 的操作,即,a = a +1 = 3 。此时,运算式结束,返回两个 ++a 的值都为 3 ,所以最后打印出来的结果为 6 。

到此,我自己以为已经掌握了 ++ 的全部秘密,发现,三个 ++ 一起出现时,结果好像又不是这样了。

四、多个自加(自减)变量的计算

由于 a++ 的计算方法不变,所以只介绍有 ++a 参与的计算

1. 当 a = 1时,( ++a 加 a++ 加 a++ )的值是多少

对于上式,首先计算 ++a ,即 a = a + 1 = 2 ;再计算中间的 a++ ,取 a = 2 ,再 +1 ,此时 a = 3 ;随后计算右边 a++ ,取 a = 3 , 再 +1 ,此时 a = 4 ;最后,将 a = 4 赋值给 ++a 。
此时,原式的值 = 4 + 2 + 3 = 9 。

// ++a 加 a++int a = 1;printf("%d\n", ++a + a++ + a++ );


如果我有罪请惩罚我,而不是让我在这里搞这个。

五、多个自加(减)运算符 计算原理纠正

原来,多个运算符在一起计算的时候,要注意中间的运算符喔!!!
尤其是,被忽略的 ” + “号,是双目运算符,需要计算完成再进入下一个计算

因此,对 4.1 的式子,可化为:( ++a + a++ ) + a++ 。

  1. 计算左半边,先是 ++a ,即 a = a + 1 = 2 ;再计算括号内的 a++ ,取 a = 2 ,再 +1 ,此时 a = 3 ,最后将 a = 3 赋值给 ++a;
  2. 随后计算右边 a++ ,取 a = 3 , 再 +1 。
    此时,原式的值 = 3 + 2 + 3 = 8 。

再附赠一个 ++a + ++a + ++a 的计算。
先将其转化为 ( ++a + ++a ) + ++a 。

  1. 计算左半边,先是 ++a ,即 a = a + 1 = 2 ;再计算第二个 ++a ,让 a = a +1 = 3 ,最后将 a = 3 赋值给 ++a (两个);
  2. 随后计算右边 ++a ,先 +1 ,再将 a = 4 赋值给 ++a 。
    此时,原式的值 = 3 + 3 + 4 = 10 。
// ++a 加 a++int a = 1;printf("%d\n", ++a + ++a + ++a ); 


至此 , 基本上摸清楚了 。

六、我多说一嘴

  1. 底层原理调用还没看,不知道有没有影响
  2. 本文图片均来自 : 菜鸟工具