a=b+(b=a)*0是如何编译
来源:互联网 发布:买软件的市场 编辑:程序博客网 时间:2024/04/29 05:58
正确的解法是:
a = b + ( b = a ) * 0
首先编译器根据运算符优先级,先找到这个里面最优先的运算符*,确定结合顺序如下:
a = ( b + ( ( b = a ) * 0 ) )
接下来,根据C#规范,会从左至右计算每个子表达式的值,第一个子表达式b,值为当前b值,记为b ',第二个子表达式b = a,值为当前a值,记为a ',最后一个表达式0,值为0。
接下来,根据刚才确定的顺序,依次进行计算。
b = a已经运算完毕,值为a ',这时进行乘法运算,然后进行加法运算,然而C#的编译器意识到这个加法是没有意义的,故而优化掉,所以,整个表达式被优化为:
a = b '
加上刚才计算子表达式的值时计算的b = a。
故而C#的编译器做出了最简的IL代码。
a = b + ( b = a ) * 0
首先编译器根据运算符优先级,先找到这个里面最优先的运算符*,确定结合顺序如下:
a = ( b + ( ( b = a ) * 0 ) )
接下来,根据C#规范,会从左至右计算每个子表达式的值,第一个子表达式b,值为当前b值,记为b ',第二个子表达式b = a,值为当前a值,记为a ',最后一个表达式0,值为0。
接下来,根据刚才确定的顺序,依次进行计算。
b = a已经运算完毕,值为a ',这时进行乘法运算,然后进行加法运算,然而C#的编译器意识到这个加法是没有意义的,故而优化掉,所以,整个表达式被优化为:
a = b '
加上刚才计算子表达式的值时计算的b = a。
故而C#的编译器做出了最简的IL代码。
- a=b+(b=a)*0是如何编译
- a = b + (b = a) * 0;
- A^B = B^A
- A^B = B^A
- A^B = B^A
- A^B=B^A
- 编译原理课后习题答案令A,B和C是任意正规式,证明以下关系成立(A|B)*=(A*B*)*=(A*|B*)*
- Python a,b=b,a+b
- a,b=b,a+b 与 a=b,b=a+b
- A&= ~B 是去掉某个标记 A |= B 是加上某个标记 (A&B != 0)是判断有没有这个标记
- A b=a;同A b(a);一样调用的是b的拷贝构造函数的证明
- Python中list的a=a+b和a+=b是不一样的
- irb(main):040:0> a,b=b,a
- A *a=new B();
- A *a=new B();
- A *a=new B();
- 实现B=A+A’
- A a = new B();
- Spring事务管理的失效和Proxy类型的DataSource
- 凡事无法尽如人意,鱼和熊掌不可兼得
- Google Andriod SDK published with Apache Harmony used
- 判断字符串是否为数字
- document 对象详解
- a=b+(b=a)*0是如何编译
- 使用存储过程的一些小提示!
- Linux下Java工程打包
- 手动控制div内信息上下滚动
- 恐怖的人狼城
- 用js实现菜单导航功能
- Fun.xls. 之惑
- C# 基础需知
- 学习《WF本质论》笔记