自增自减运算的原理解析
2009-12-08 17:12
267 查看
int a=1;
int b=1;
a+++++b;
a---b;
经常有人问到以上的这些表达式的值是什么..?是根据什么原理来分析这样的表达式...?就这个内容,来讨论一下...
这里需要涉及到"贪心法"这个说法了...在<<c traps and pitfalls>>中说明了这样一个规则:每一个符号应该包含尽可能多的字符.
意思是:编译器在分析程序的时候,是从左至右的单个字符读入的,那么类似"/*test"这样的字符串,那要怎么解析呢..?根据规则,第一个读入的肯定是字符'/'了,那么要尽可能包含多的字符,尝试着去包含字符'*',结果他们能够组成有效字符串"/*",那么继续解析,下一个字符是't',和前面的字符串组合起来没有意义,因此"/*"是能够组合的有意义的最长的字符串了.因此,解析的结果出来了,"/*test"应该解析为"/*"再加上"test","test"继续按照上面的规则进行解析...这就是词法解析的过程,即为"贪心法".
那么原理上明白后..我们来看表达式a+++++b;应该如何解析:
同样根据规则来:
先解析出字符'a',下一个是字符'+',根据尽可能多的包含字符的原则,下面一个也是字符'+',组合在一起是"++",这在c语言中就是自增运算符了,因此完全是有效的运算符,所以这样就解析了"a++",依此类推,根据规则,接下来的也是会解析成"++"了,这里就有了一个问题了...
应该都知道,在c语言中,a++是不能作为左值使用的,因此根据规则来是解析成"++",整体应该是"(a++)++",但是因为限制了a++不能作为左值,违反了c语言的语法,所以不能这样解析,那么就只能解析成'+'了,那么现在就解析成了"(a++)+(++b)"...
所以结果也就自己出来了...不再赘述.
int b=1;
a+++++b;
a---b;
经常有人问到以上的这些表达式的值是什么..?是根据什么原理来分析这样的表达式...?就这个内容,来讨论一下...
这里需要涉及到"贪心法"这个说法了...在<<c traps and pitfalls>>中说明了这样一个规则:每一个符号应该包含尽可能多的字符.
意思是:编译器在分析程序的时候,是从左至右的单个字符读入的,那么类似"/*test"这样的字符串,那要怎么解析呢..?根据规则,第一个读入的肯定是字符'/'了,那么要尽可能包含多的字符,尝试着去包含字符'*',结果他们能够组成有效字符串"/*",那么继续解析,下一个字符是't',和前面的字符串组合起来没有意义,因此"/*"是能够组合的有意义的最长的字符串了.因此,解析的结果出来了,"/*test"应该解析为"/*"再加上"test","test"继续按照上面的规则进行解析...这就是词法解析的过程,即为"贪心法".
那么原理上明白后..我们来看表达式a+++++b;应该如何解析:
同样根据规则来:
先解析出字符'a',下一个是字符'+',根据尽可能多的包含字符的原则,下面一个也是字符'+',组合在一起是"++",这在c语言中就是自增运算符了,因此完全是有效的运算符,所以这样就解析了"a++",依此类推,根据规则,接下来的也是会解析成"++"了,这里就有了一个问题了...
应该都知道,在c语言中,a++是不能作为左值使用的,因此根据规则来是解析成"++",整体应该是"(a++)++",但是因为限制了a++不能作为左值,违反了c语言的语法,所以不能这样解析,那么就只能解析成'+'了,那么现在就解析成了"(a++)+(++b)"...
所以结果也就自己出来了...不再赘述.
相关文章推荐
- C++位运算原理解析
- 位运算实现ACL授权与认证过程的原理解析
- 位运算实现ACL授权与认证过程的原理解析
- 【React Native】从源码一步一步解析它的实现原理
- 1.Mycat原理解析-Mycat架构分析
- 斗奶Tv 刷鱼丸脚本 原理讲解 以及 脚本解析 每天1000 不是梦。
- 数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
- Android中的Apk的加固(加壳)原理解析和实现
- 死锁原理和解析
- 主成成分分析pca算法 原理解析
- 解析Oracle数据扫描 Oracle SQL查询优化 提高局部范围数据扫描执行性能的原理
- springboot之启动原理解析
- 谷歌Cartographer学习(2)-原理阐述与源码解析
- 前端文摘:深入解析浏览器的幕后工作原理
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- 试解析Tomcat运行原理(一)--- socket通讯
- Dubbo原理解析-Dubbo内核实现之基于SPI思想Dubbo内核实现
- 数据库水平切分的实现原理解析
- 骨骼蒙皮动画(Skinned Mesh)的原理解析(一)
- 深入解析浏览器的幕后工作原理(三) 呈现树和 DOM 树的关系