为了账号安全,请及时绑定邮箱和手机立即绑定

为什么a原值是100,a++还是100,++a就成了102了,--a和a--都是101,到底是为啥

a=100

printf(a++)不是该101吗?

正在回答

9 回答

感谢weixin_慕后端1512621的提问,让我重新审视了自己上一个答案,发现第6、7条思路不够严谨,重新梳理了一下,作出修改如下:
6.a+1=100+1=101(运算,得结果,运算前数值为上一公式的运算结果,为100,运算100+1=101,而得出这个结果为101

【注意】这里“为什么式"a+1"最后不取值?”

       我的猜想是这样的,程序默认"a++""a--""++a""--a""a"的运算自成一格体系,相当于一个主线任务,在"a+1"这一步中,"a"取上一运算值,此步骤的主线任务已经完成,后面的"+1"相当于支线任务,支线任务虽然会被执行,乃至得出结果,但其结果仅代表支线任务的完结,并不会影响主线任务,后面的主线任务仍然独立运行。(我是根据此步骤结尾处“//注意,这里并不改变a的值”这一提示推断出来的)。

7.a=100(【注意】由上,因为公式"a+1""+1"部分相当于“支线任务”,其结果101并不影响“主线任务”,所以这里取值应该取"a+1"运算中的“主线任务部分”,即取"a"的值,其结果为100。)

PS:我上一个回答,在运算7.中说跳过运算6.取值,仔细想想不够严谨,应该是运算7.中"a"的值,取了运算6."a+1"中的"a"值,即“主线部分”的运算结果,这种思路“主线任务”仍然独立且延续运行,这样才更符合程序运行的思路才对,毕竟程序不会像我们一样闹情绪,随便的中断、跳过某些步骤。我想这样的逻辑才更加严谨,欢迎大家共同探讨,谢谢各位。
       以上理论仅为个人推论,并不专业,仅供大家参考,还请以专业人士说明为上

0 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5d35638e000133c704060208.jpg

以下分析内容为我个人的思考和推导,并不专业,仅供参考,如有错误,还望不吝指教:

        在该例子中a的数值是根据运算不断递进推演即上一运算的结果为下一运算a的数值。我个人的反思具体详解如下所示:

  1. a=100(目前“取值”为a=100)

  2. "a++"="a+1"="100+1"=101(先取值,再运算,这里的取值为上一个运算结果,即100,再运算100+1=101,运算结果为101)

  3. "++a"="a+1"="101+1"=102(先运算,再取值,运算前数值为上一公式的运算结果,为101;先运算101+1=102,再取值为102

  4. "--a"="a-1"="102-1"=101(先运算,再取值,运算前数值为上一公式的运算结果,为102;先运算102-1=101,再取值为101

  5. "a--"="a-1"="101-1"=100(先取值,再运算,这里的取值为上一个运算结果,即101,再运算101-1=100,运算结果为100)

  6. a+1=100+1=101(运算,得结果,运算前数值为上一公式的运算结果,为100,运算100+1=101,而得出这个结果为101【注意】这里的运算结果不影响下一运算a的值,即不被后面运算取值,如若后面运算需要取值,则应该跳过此条运算,取值上一运算最后的结果,即取值为100)

  7. a=100(【注意】因为公式"a+1"最后不取值,所以这里取值需要跳过公式"a+1",从公式"a--"的运算结果中取值,不需要任何运算。)

       以上解释是我个人自学反思的一些理解,如果答案对您有所帮助,希望您能点个赞,如果答案有错漏的地方,希望各位不啬言辞,为我纠正错误,共同进步,谢谢各位。

11 回复 有任何疑惑可以回复我~
#1

weixin_慕后端1512621

为什么式"a+1"最后不取值呢
2019-07-24 回复 有任何疑惑可以回复我~
#2

leoliqian 回复 weixin_慕后端1512621

这里并不改变a的值”推断得出此结果)。
2019-07-24 回复 有任何疑惑可以回复我~
#3

leoliqian 回复 weixin_慕后端1512621

我的理解是这样的,程序默认"a++""a--""++a""--a""a"的运算自成一格体系,相当于一个主线任务,在"a+1"这一步中,"a"取上一运算值,此步骤的主线任务已经完成,后面的"+1"相当于支线任务,支线任务虽然会被执行,乃至得出结果,但其结果仅代表支线任务的完结,并不会影响主线任务,后面的主线任务仍然独立运行。(我是根据此步骤结尾处“//注意,这里并不改变a的值”这一提示推断出来的) 这些说法都是我自己的推想,并不专业,仅供大家参考,以专业人士解答为主,不严谨甚至错误的地方,希望各位为我纠正,共同进步,谢谢各位!
2019-07-24 回复 有任何疑惑可以回复我~

这句话很很重要“它们经常使用在循环中。”从上到下只有一个a,这个a是被循环用的。

解释上面结果:a++=100(输出值是100,其实已经递增1了);

下面++a=102(因为前面递增了1加上这次增的1所以就是102);下面的a就是以102为基础,以此类推......

0 回复 有任何疑惑可以回复我~

所以a++后,先输出100后,a的值变为101,++a后输出102;如果102基础上--a是输出101,再进行a--运算输出还是101,但a的值已经变成了100。

4 回复 有任何疑惑可以回复我~

a++是先执行该条语句(输出或是计算),然后再自减;++a则是相反,先自减,然后执行语句;

a--和--a也一样。

0 回复 有任何疑惑可以回复我~

--a应该是98 a--应该是100


0 回复 有任何疑惑可以回复我~

a++可以这么理解  a在前面他已经取了值后面的+号对他没有影响  ++a,+加号在前所以要+1+1+a =102

0 回复 有任何疑惑可以回复我~
#1

太阳系新生 提问者

这么说的话,--a不是该等于98吗 a--就是100啊 为什么 a--和--a都是101
2019-07-13 回复 有任何疑惑可以回复我~
#2

weixin_慕前端6134695 回复 太阳系新生 提问者

--a只减去一个值并且前面的a的值已经被改变了
2019-07-14 回复 有任何疑惑可以回复我~
#3

南城夜雨 回复 太阳系新生 提问者

那是负号不是减号相当于负一 我是这么理解的
2019-07-19 回复 有任何疑惑可以回复我~

a++是先取值后运算的  ++a是先运算后取值  也就是说a是100是被  打印了一次  经过两次加一后才被 打印 所以就是加了2   所以被打印成  102


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么a原值是100,a++还是100,++a就成了102了,--a和a--都是101,到底是为啥

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信