Prophet 发表于 2014-4-17 21:34:48

运算优先级问题请教

本帖最后由 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;


}

帮忙分析下怎么执行运算的啊?谢谢。

天使之约 发表于 2014-4-17 23:18:16

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:11

少年,希望你能看懂

Prophet 发表于 2014-4-18 00:01:57

天使之约 发表于 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谢谢。

网络学习 发表于 2014-4-18 00:14:07

恩 学习了 谢谢你的指导
页: [1]
查看完整版本: 运算优先级问题请教