鱼C论坛

 找回密码
 立即注册
查看: 2031|回复: 4

运算优先级问题请教

[复制链接]
发表于 2014-4-17 21:34:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


}

帮忙分析下怎么执行运算的啊?谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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的值不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-17 23:19:11 | 显示全部楼层
少年,希望你能看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-18 00:01:57 | 显示全部楼层

:cry  是这样的。
我想是在编译的时候,编译器对 a<b || ++b>k;自左向右编译,然后机器响应的时候看到a<b为1,然后接着看到 || 或运算符,然后就直接返回1这样。还是编译器先对a<b || ++b>k表达式进行整体编译,建立相应的开关电路,然后再从内存取数值参与运算,及控制开关通断?
汇编对a<b || ++b>k这条语句怎么处理的?
O(∩_∩)O谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-18 00:14:07 | 显示全部楼层
恩 学习了 谢谢你的指导
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 23:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表