C语言中,各类数值型数据间的混合运算的问题。

10+‘a’+i*f-d/e在计算机执行时从左至右扫描,运算次序为:①,进行10+'a'的运算,先将'a'转换成整数97,运算结果为107②,由于“*”比“+”优先,先进... 10+‘a’+i*f-d/e
在计算机执行时从左至右扫描,运算次序为:
①,进行10+'a'的运算,先将'a'转换成整数97,运算结果为 107
②,由于“*”比“+”优先,先进行i*f的运算。先将i与f都转换成double型,运算结果为 double 型。

我想问大家的是,为什么①,不是放在②,之后执行?为什么先蹦出一个107 ??
最要用实际程序来验证先执行①,再执行②
谢谢。
展开
 我来答
pijk55556
2013-05-05 · TA获得超过296个赞
知道答主
回答量:27
采纳率:0%
帮助的人:37万
展开全部

我同意chiconysun的说法,运行的时候从左往右读入数据和运算符的到当前操作符的后一个运算符为止,比较优先级来决定运算顺序。这是对于混合运算的规则,但我不清楚这是普遍遵循的规则还是和编译器有关。

用实际程序来验证:

运行

int i, j; //未进行初始化

int x = i + 1 + 3 * j; //关于 i + 1 和 3 * j 哪一项先进行运算 

运行时检测到错误“变量 i 未被初始化的情况下被使用”,可以从中看出是 i + 1 先于 3 * j 进行运算。(否则就会报出变量 j 的错误信息。)

chiconysun
2013-04-16 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2505万
展开全部
从宏观上看,这个式子可以简化为A+B+C-D这样的格式,编译时候差不多是这样个过程:
从左向右扫描,先读入10,再读入+,接着读入'a',注意此时不能计算,因为后面可能还有更高级别的运算符(比如10 + 'a' * 20...),接着再读入一个+,因为这个+和前一个+的运算符优先级一致,并且同级别的+的运算次序是从左向右(例如a+b+c+d,如果不考虑速算或者加法的交换律,这个准确的计算次序一定是((a+b)+c)+d,其他同级别的算术运算符结合性也是一样的),不管后面的表达式是什么样的,这里的第一个+肯定可以计算出结果出来了,因此先计算出10 +'a'为107
打个比方说:虽然原则上先乘除后加减,如果给定一个很长的混合运算式子,一般而言,大多是人也觉得没有那么机械死板地去,那个局部可以得出结果来,一定会用中间结果去简化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyhgongzuo1
2013-04-16 · TA获得超过2655个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:89.2万
展开全部
这是谭浩强的《C程序设计》(第三版)的第54页里面写的。谁知道如何解答呢?谢谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式