黑马程序员技术交流社区

标题: 自增运算后是多少? [打印本页]

作者: 杨勇    时间: 2014-4-19 20:02
标题: 自增运算后是多少?
本帖最后由 杨勇 于 2014-4-20 10:53 编辑

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}
作者: 愿我能    时间: 2014-4-19 20:25
a++是先执行语句在+1,++a是先+1在执行语句 所以 (a++)+(++a) a++为2进行运算 但此时a已经变为3 ++a时 又变成4执行运算 所以结果b为6
作者: 魅影穿眸    时间: 2014-4-19 20:45
你只要记住a++是想让a参加运算,运算后加一,而++a是先进行加一然后再运算,因为a=1。执行++a后这是a是二, 执行b=(a++)+(++a),执行前a++为2,然后a变为3,在执行++a这是a变为4,最后为b=6,a=4
作者: m573555543    时间: 2014-4-19 21:43
a++    和     ++a     的区别

一般来说他们的区别在于混合表达式中运算符的处理顺序。
a++是先处理其他运算,然后a再自加;
而++a则是先处理a自加运算,再处理其他表达式运算;
如果只是单纯的表达式a++;或者是++a;这两个表达式的结果就没什么区别。
譬如是
#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}
计算的结果是a=4,b=6
++a是表达式先处理自加运算后处理赋值运算;
a++是表达式先处理赋值运算后处理自加运算;

作者: 578867020    时间: 2014-4-20 00:02
++在前的话a要先加在参与到运算里面
++在后的话用a原来的值参与运算后a在自加
作者: 戴文婷    时间: 2014-4-20 02:38

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}
a++,++在后面的是碰到;号才加1,但是加了括号,就先运算,不碰到;也可以先加。所以,(a++) 后结果是3,之后++a是先执行加一操作,就变成了4.
作者: 星河鹭起    时间: 2014-4-20 11:46
本帖最后由 星河鹭起 于 2014-4-20 11:57 编辑

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}

自增运算++优先级高于+,且从左往右开始运算。
因此首先a运行完后,因为这里a有个括号,就导致直接加1,变成了3,此时在运行++a,所以此时a就变成了4。
a++




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2