x=x++到底在计算机中是如何执行的?

很多计算机初学者可能对x=x++在计算机中的计算不清楚,前几天我遇到一个很简单的语句发现输出结果与我预想不同,于是我开始探究x=x++在计算中是如何运行的,到底x=x++,是根据运算级先执行x++,还是先执行x=x?既然存在歧义,希望这篇文章给大家带来帮助,也欢迎各位与我进行探讨。

假设有以下场景语句;

                                                                图(1)

 上图语句的意思就是如果y++>70,那么x=x+y。反之x=x++;让我来浅浅替大家分析一波。

首先:y++>70?因为70!>70,所以先会执行x=x++,后执行y++,对吧,这一点我想大家应该能达成共识。

那么x=x++到底应该等于多少呢?在我公布答案前会有很多人坚定的认为 x赋初始值5,所以x=x++应该会输出6吧。当然,我以前也是这样认为的。我先来说我以前这样认为的理由,x=x++,这是一个赋值语句,要把x++的值赋值给x,这应该是我最初的想法,另外,++符号的运算级要比赋值(=)的优先级高,所以我们大多数人会固有思维的认为要先进行x++等于6的运算,再把6赋值给x;最后就算x=x++,先把5赋值给x,再执行x++,可是在输出x的值是在x++执行完之后的,x的值就应该是+1之后的6。

实际上呢,先上结果!!!!

                                                                    图(2)

 很奇怪吧,为什么我们人为地认为的要先进行++运算,怎么计算机先执行x=x,而且好像并没有执行x++一样就把x的值输出了?要明白这一点我们再再做几个语句分析。

                                                                图(3)

 

上图中,我给x赋予初值1,直接输出x++的结果,就等价于x=x++,然后再输出x。由输出结果可见,x的值并没有发生变化,同时也能看到,在执行完cout<<x++<<endl;语句后,x++语句生效,在第二次输出x的值中输出结果为2;

讲了这些,那么x=x++在计算机到底是怎么计算的呢?

首先说说我自己的理解,x=x++语句中,先执行x=x;后执行x++;这个大家应该能够理解,因为在我们的两种不确定的运算顺序中有这么一种顺序。很显然在计算机的运算中遵循这样的顺序。在x=x执行完成之后,x的值被存入内存,然后x++,于是我产生了这样的猜想,x++是不是没有被存入内存?也就是下图所示:

                                                                   图(4)

 

但是如果没有存入内存,那么图(3)的结果又是从哪里来的呢?秉着不求甚解的态度,我询问了我的大学数据结构老师,她说可以把x=x++语句分解成以下语句

                                                                      图(5)

分析起来可以这样理解,系统在执行x=x++时,先申请了一个随机变量(这里举例y),随机变量y做了这样一件事,先保存x的值(y=x),然后x再自增(x++),最后再把x的值还原回去(x=y)。因为我们存在歧义的地方也是这个语言存在歧义的地方,所以语言设计之初就会规定x=x++有这样的运行机制。

                                                                         图(6)

如上图,把x=x++换成y=x++便回到我们的认知。

简单来说x=x++ 赋值变量和被赋值变量符号相同,存在歧义,c语言或者说计算机采取图(5)的运行机制。 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值