C语言中:设i为int型,f为float型,d为double型,e为long型 10+‘a’+i*f-d/e 为什么不先算i*f呢?
答案:4 悬赏:80 手机版
解决时间 2021-02-08 18:12
- 提问者网友:放下
- 2021-02-08 13:47
C语言中:设i为int型,f为float型,d为double型,e为long型 10+‘a’+i*f-d/e 为什么不先算i*f呢?
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-02-08 14:05
应该是求值顺序的问题,C语言里面没有严格规定求值顺序追问在类型转换章节啊追答可是你的问题中,哪里看出来不是先算i*f的?并且先算谁又有什么影响,反正最后都转成了double参考资料:http://blog.csdn.net/shijiemazhenda/article/details/6231500
全部回答
- 1楼网友:千杯敬自由
- 2021-02-08 16:32
C赋值运算符的计算顺序由右至左,你这个表达式等同于赋值,由于*和/优先级相同,所以先算除法了。
- 2楼网友:归鹤鸣
- 2021-02-08 15:44
运算符优先级的作用范围只是靠近它的前后两个运算,比如:
#include
int main ()
{
int a=3,b=5,c;
c=a*b-(a+=b);
printf("%d",c);
return 0;
}
按你的想法,括号把a+=b的优先级提到了最高,应该先运算,但是括号只是在前后相邻的三个运算中将其优先级提高,所以运算顺序依然是1.a*b;2.a+=b;3.两者相减
明白否?
#include
int main ()
{
int a=3,b=5,c;
c=a*b-(a+=b);
printf("%d",c);
return 0;
}
按你的想法,括号把a+=b的优先级提到了最高,应该先运算,但是括号只是在前后相邻的三个运算中将其优先级提高,所以运算顺序依然是1.a*b;2.a+=b;3.两者相减
明白否?
- 3楼网友:未来江山和你
- 2021-02-08 14:19
#include
int main(void)
{
int i = 2;
float f = 2.5;
double d = 10.0;
long e = 5;
printf("%f\n",10+'a'+i*f-d/e);
return 0;
}
我的机器上运行结果是110.0000,表明是先算i * f。
你是怎么看出不先算i * f 的?
int main(void)
{
int i = 2;
float f = 2.5;
double d = 10.0;
long e = 5;
printf("%f\n",10+'a'+i*f-d/e);
return 0;
}
我的机器上运行结果是110.0000,表明是先算i * f。
你是怎么看出不先算i * f 的?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯