关于printf(“%d,%d“,i--,i++)的问题

i++是先进行运算在加一,++i是先加一再进行运算

i--是先进行运算在减一,--i是先减一再进行运算

 为什么一模一样的程序反而运行的结果却又如此大的差异????

                                                 此时我们从简单开始进行分析

正常我们的运算是,9,10,11,12

由上图我们可以看出,和正常的算法是不同的

 而该图我们可以得知编译器是从右往左进行运行的

若按正常的计算来说,12,10,10,9,根据上图,我们不难看出,++i的值是一致的,且一最后一个为准,所以说为12,10,12,12

同理

该图正常算法,输出结果应该为,11,11,10,9,但是i++是先参与运算在加一,所以其储存的i=12,所以结果又变为了11,12,12,12.

此时我们根据上图可以发现,i++的值是不变的

由此我们会发现,++i,以最后的i的值为结果,而 i++是以正常的,本来的结果为准

这时我们继续研究i--,--i

我们惊奇的发现,--i竟然也不是正常算法,且与++i极其相似,结果一致性

而i--呢,是正常算法,且编译器从右往左

于是我进行了如下操作

正常计算的话,先进行i--,结果为8,然后--i,结果为6,接着i--,结果仍为6,i--结果为5,但是此时储存i的值是4,因为i--是先进行运算再减一,也就是先输出原来的值,i的值再减一

同理这几个程序,我们发现--i是以最终的i的结果为答案,而--i是以正常运算的结果为准,那么当我们将集中表示混合起来时,规律是否成立

                               Int i=8;                                    编译器输出             正常算

  1. printf(“%d,%d,%d,%d/n”,++i,++i,--i,--i)     8,8,8,8                8,7,6,7
  2. printf(“%d,%d,%d,%d/n”,++i,--i,--i,--i)       6,6,6,6                6,5,6,7
  3. printf(“%d,%d,%d,%d/n”,i++,i++,i--,i--)     7,6,7,8                7,6,7,8
  4. printf(“%d,%d,%d,%d/n”,i++,i--,i--,i++)     7,8,9,8                7,8,9,8
  5. printf(“%d,%d,%d,%d/n”,i++,i--,++i,i--)     7,8,8,8                7,7,8,8
  6. printf(“%d,%d,%d,%d/n”,++i,i--,i++,--i)              8,8,7,8                8,8,7,7

 由此我们总结出结论

      符号在前面的,一律为最终的i, 符号在后面的,一律正常计算

由此我们就可以解释这个问题了

首先我们进行从右往左进行运算,得到的结果为

                            输出                  i

-i--=-(i--)              -8                     7

-i++=-(i++)           -7                     8

i--                          8                     7

i++                        7                     8

--i                          7                     7

++i                        8                     8                    i=8

对于这种计算,我总结了一个规律,

符号在后直接输出,i的值要变的,符号在前,i经过加减后再输出

8,7,7,8,-7,-8

按照规律即为8,8,7,8,-7,-8

 你学会了吗?

         

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值