关于 y=(++x)+(++x); 的问题

设x的值为3,y=0,则表达式y=(++x)+(++x)后,y的值是( ),不同编译器会有不一样的答案。先写结果:

C++:
y=10;

java:
y=9;

matlab:
y=6;

为什么会有这样的结果呢,到底哪个是对的?其实没有对错之分。原因是各编译器处理式子的方式不一样,这个在编译原理中我们学过。就是所谓的前缀表达式,中缀表达式,后缀表达式。什么意思呢?拿刚才的例子来说吧,C++的处理方式就是采用的后缀表达式,Java的处理方式就是采用的中缀表达式,matlab的处理方式就是采用的前缀表达式。C++先算的++x,x=4, 然后再++x, x=5,最后两个相加得10。Java是先算++x, 等于4,4再加上++4(即5)等于10。matlab是3+3=6,最后再算++。

有错的地方欢迎指正。

时间: 2024-10-24 16:04:27

关于 y=(++x)+(++x); 的问题的相关文章

微信 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"}

{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"} 问题:微信网页授权后,获取到 openid 了,一刷新又没了 微信网页授权获取到的 code 只能使用一次(5分钟内有效),使用一次后,马上失效. 页面授权跳转成功,根据 code 也换取到 openid 了. 此时刷新页面,并不会再次进行授权,而是直接刷新了一下上一次授权跳转后的链接,带的还是

[hihoCoder#1381]Little Y's Tree

[hihoCoder#1381]Little Y's Tree 试题描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每次小J会删掉这个树中的k条边,这棵树被分成k+1个连通块.小J想知道每个连通块中最远点对距离的和. 这里的询问是互相独立的,即每次都是在小Y的原树上进行操作. 输入 第一行一个整数n,接下来n-1行每行三个整数u,v,w,其中第i行表示第i条边边权为wi,连接了ui,vi两点. 接下来一行一个整数q,表示有q组询问. 对于每组询问,第一行一个正整数k,接下来一

机械随笔(y一)

过去最巧秒的机械往往是机械对机械自身的控制,然而现在往往只要一块电路板就行了(有点无奈). 可爱可畏的机电一体化. 人类社会第一个巨大进步,效率生产力的极大提高,人口的井喷来自工业革命,来自对钢铁肌肉的力量的首次挖掘利用.而今全球互联网的沟通促成的信息无限交流并未最大限度地提升人类生产力(更不用说某些的商业方面的模式创新).信息的交流是为生产力的提升打下坚实基础,当然强大的云计算也应该是未来生产变革中不可或缺的一环.最终的发展仍然要落实到制造的本体上,毕竟现在的人不可能靠数据流生活,很长很长一段

Y combinator 的推导过程

最近在看<暗时间>,书中有Y组合子的推导过程,初看时很难理解,这里记录一下加深记忆,我们使用Scheme语言的语法. 我们知道Scheme中可以这样定义递归函数 (define (func n) (if (= n 0) 1 (* n (func (- n 1))))) 但是我们知道define这个函数只起到了一个语法糖的效果,再对应lambda表达式还未知的时候是不能使用这个函数. 接下来我们只通过使用lambda表达式来推导出递归函数. 我们先做一下尝试 (lambda (n) (if (=

iOS CGRectGetMaxX/Y 使用

在iOS的界面布局中我们可以使用CGRectGetMaxX 这个方法来方便的获取当前控件的x坐标值+宽度的数值,这样便可以方便布局. 同理CGRectGetMaxY是获取y坐标值+控件高度的值,当然这个系列的方法还有很多大家可以试下. /* Return the leftmost x-value of `rect'. */ CG_EXTERN CGFloat CGRectGetMinX(CGRect rect) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE

HDOJ 4705 Y 树形DP

DP:求出3点构成链的方案数 ,然后总方案数减去它 Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1738    Accepted Submission(s): 493 Problem Description Sample Input 4 1 2 1 3 1 4 Sample Output 1 Hint 1. The only

hdu 1785(You Are All Excellent)(数学函数atan2(y.x)返回(x,y)的反正切值)

You Are All Excellent Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2945    Accepted Submission(s): 1061 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出

linux出现提示信息Display all 1710 possibilities? (y or n)的总结

出现Display all 1710 possibilities? (y or n)的原因 现象如下 出现这种现象的原因是在什么也没有输入的情况下连续按两次tab键. 出现Display all 1710 possibilities? (y or n)之后,只要按n就会返回命令行了,对系统或其他进程不会产生任何影响.

Java 递归解决 &amp;quot;仅仅能两数相乘的计算器计算x^y&amp;quot; 问题

/** * 求一个数的乘方 * 求x^y,y是一个正整数. 设计算器仅仅能计算两数相乘,不能一次计算n个数相乘. * 知:2^5=(2^2)^2*2; 2^6=(2^2)^3=((4)^2)*4; 2^8=(2^2)^4= (4^2)^2= 16^2 * 得到规律:x^y= (x^2)^(y/2),定义a=x^2,b=y/2, 则得到形如: x^y= a^b; * y假设是奇数,则分解的最后还要再乘以a(如上面2^6分解成4^3时):x^y=a^b*x. * * 用递归来解:那么每次x都传入一个

POW(x,y)

POW(x,y) 用于返回 x 的 y 次方的结果 mysql> SELECT POW(2,4), POW(2,-4); +----------+-----------+ | POW(2,4) | POW(2,-4) | +----------+-----------+ | 16 | 0.0625 | +----------+-----------+