运算优先级问题请教
本帖最后由 Prophet 于 2014-4-17 21:38 编辑int main()
{ int a=6;
int b=7;
int k=9;
a = a<b || ++b>k;
printf("%d %d",a,b);
return 0;
}
帮忙分析下怎么执行运算的啊?谢谢。
a = a<b || ++b>k;
首先这里涉及短路运算:
1、a||b如果a的真值为1则不计算b
2、a&b如果a的真值为0则不计算b
a = ((a<b) || (++b>k));
希望你能看懂:
a<b真值为1,则不计算 ++b>k
最后a的值为a=1|| (++b>k)=1
由于短路运算不计算 ++b>k,故b的值不变
少年,希望你能看懂 天使之约 发表于 2014-4-17 23:19 static/image/common/back.gif
少年,希望你能看懂
:cry是这样的。
我想是在编译的时候,编译器对 a<b || ++b>k;自左向右编译,然后机器响应的时候看到a<b为1,然后接着看到 || 或运算符,然后就直接返回1这样。还是编译器先对a<b || ++b>k表达式进行整体编译,建立相应的开关电路,然后再从内存取数值参与运算,及控制开关通断?
汇编对a<b || ++b>k这条语句怎么处理的?
O(∩_∩)O谢谢。 恩 学习了 谢谢你的指导
页:
[1]