自增自减

yjdxgah2005 2006-05-14 03:43:38
很不熟悉自增自减,请教~




#include "stdio.h"
main()
{
int a=5,b,c,i=10;
b=a++;
c=++b;
printf("a=%d,b=%d,c=%d\n",a,b,c); 这行为什么都是输出6呢!?
printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); 这行为什么都是输出12,11,10!?
printf("%d\n",++i );
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++); 这行为什么都是输出-12?
printf("%d\n",-i--); 这行为什么都是输出-13 ?
}
...全文
318 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjdxgah2005 2006-05-30
  • 打赏
  • 举报
回复
放回缓冲区的是表达式的值也就是改变后的变量值。 弄懂了 非常感谢


今天有事明天来结贴
ywhbn 2006-05-29
  • 打赏
  • 举报
回复
不用想那么复杂,记那么多情况。
只要记住这两条就行了:
1、a++, ++符号在变量后面,变量的值就先参与其它运算然后自增
2、++a, ++符号在变量前面,变量的值就先自增然后参与其它运算

碰上各种情况,就用这两条去分析
lishunan859 2006-05-29
  • 打赏
  • 举报
回复
++(--)在前是先对变量的值进行自加(或自减)后,再把变量的值作为表达式的值参与运算
而++(--) 在后是先把变量的值作为表达式的值参与运算, 然后变量再自加(或自减)

假设i = 10;
printf("%d\n",++i ); //先把 i 自加1后,铸后再把 i 的值作为表达式的值,所以 i = 11,打
印输出的值为 11;
printf("%d\n",--i); //先把 i 自减1后,铸后再把 i 的值作为表达式的值,所以 i = 10,打
印输出的值为 10;
printf("%d\n",i++); //先把 i 的值作为表达式的值,然后变量 i 再自加 1 ,所以打印
输出的值为 10, 变量i = 11;
printf("%d\n",i--); //先把 i 的值作为表达式的值,然后变量 i 再自减 1 ,所以打印
输出的值为 11, 变量i = 10 ;
printf("%d\n",-i++); //先把 i 的值作为表达式的值再取负值,然后变量 i 再自加 1 ,
所以打印输出的值为 -10, 变量i = 11;
printf("%d\n",-i--); //先把 i 的值作为表达式的值再取负值,然后变量 i 再自减 1 ,
所以打印输出的值为 -11, 变量i = 10;
huaxu2002 2006-05-29
  • 打赏
  • 举报
回复
多用用vc的debug,查看程序的运行情况,这样自己掌握的更清楚些
新鲜鱼排 2006-05-29
  • 打赏
  • 举报
回复
学习
xb90110 2006-05-29
  • 打赏
  • 举报
回复
楼上讲的很清楚!只要按照楼上做就能完全掌握!!
yjdxgah2005 2006-05-27
  • 打赏
  • 举报
回复
谢谢楼上的老师们~~~你们讲的很细。


但下面又有问题了:
printf("%d\n",++i );
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);

这几行的值又是怎么算出来的呢! 劳烦了
zhaomu 2006-05-21
  • 打赏
  • 举报
回复
vc显示printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); 的时候全部都是10
xl5338870 2006-05-21
  • 打赏
  • 举报
回复
printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); // 不要这么写,c实现的时候不保证i++的求值顺序,也就是说有的实现是从左到右,有的时候从右到做实现.
vc和tc中就不一样。
minioreo 2006-05-21
  • 打赏
  • 举报
回复
a++ a在前 ++在后 先执行不带++的语句 然后a自加1;
++a ++在前 a在后 先执行a自加1 然后执行语句;
在内存中是这样进行的

假如a等于5
执行b = a++;时
先在内存中找到a 将a的值5送到b的单元中
然后对a的值加1 a就变成6


若执行b = ++a;
则先将内存中a的值变成6
然后把6送到b的单元中去;
agct 2006-05-20
  • 打赏
  • 举报
回复


1 2 3
i,i++,i++

从右往左计算
<--

首先计算3
返回10到缓存区
此时i=11

再计算2
返回11到缓存区
此时i=12

最后返回i=12到缓存区

刷新缓存区就能看到屏幕所示得结果了
yjdxgah2005 2006-05-15
  • 打赏
  • 举报
回复
朋友们 指教~~
yjdxgah2005 2006-05-14
  • 打赏
  • 举报
回复
运算得到结果先放在缓冲区

当然是先从右到左运算

i,i++,i++

<<(12)<<(11)<<(10)

然后再刷新缓冲区,把值输出

~~~~~~~~~~~~~~~~~~~~~~~~
i的值是10,第一个i++的值是11,那第三个i++的值怎么是12呢?

agct 2006-05-14
  • 打赏
  • 举报
回复


运算得到结果先放在缓冲区

当然是先从右到左运算

i,i++,i++

<<(12)<<(11)<<(10)

然后再刷新缓冲区,把值输出
yjdxgah2005 2006-05-14
  • 打赏
  • 举报
回复
printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); /这行中编译器是从右到左编译的,像这行中这种这种写法是不推荐的,先进行自加自减运算,然后再打印比较好/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这值是怎么得来的请给个详解!(新手~很难理解)

先运算在输出 值就不同了啊 为什么呢
agct 2006-05-14
  • 打赏
  • 举报
回复


i++ 先返回i值,然后i变量再自加1
++i 先i变量自加1,然后再返回变化后的i值

----------------------
int a=5,b,c,i=10;
b=a++; //a=6,b=5
c=++b; //b=6,c=6
printf("a=%d,b=%d,c=%d\n",a,b,c); //a=6,b=6,c=6
printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); // a=12,b=11,c=10
//输出操作是从右往左的

printf("%d\n",++i );//i=13
printf("%d\n",--i); //i=12
printf("%d\n",i++);//i=12
printf("%d\n",i--); //i=12
printf("%d\n",-i++); 这行为什么都是输出-12?//i=-12先返回12,然后i+1

printf("%d\n",-i--); 这行为什么都是输出-13 ?
//i=-13
//先返回13,然后i-1
landay001 2006-05-14
  • 打赏
  • 举报
回复
其他的就类推吧
landay001 2006-05-14
  • 打赏
  • 举报
回复
#include "stdio.h"
void main()
{
int a=5,b,c,i=10;
b=a++; /*此时b==5,a==6*/
c=++b; /*此时b==6,c==6*/
printf("a=%d,b=%d,c=%d\n",a,b,c); /*这行为什么都是输出6呢!?*/
printf("i,i++,i++=%d,%d,%d\n",i,i++,i++); /这行中编译器是从右到左编译的,像这行中这种这种写法是不推荐的,先进行自加自减运算,然后再打印比较好/*这行为什么都是输出12,11,10!?*/
printf("%d\n",++i );
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++); /*这行为什么都是输出-12?*/
printf("%d\n",-i--); /*这行为什么都是输出-13 ? */
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧