首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将整数作为双数进行类型转换,以便从类型整数的除数中获得双重结果。

将整数作为双数进行类型转换,以便从类型整数的除数中获得双重结果。
EN

Stack Overflow用户
提问于 2015-12-08 14:51:10
回答 4查看 82关注 0票数 2

我不明白为什么输出在以下示例之间是双倍的。在以下方面:

  • 为什么一个双除以一个int会导致一个双?
  • 为什么一个整数除以一个双,结果是一个双? #包括 int main(int agrc,char **argv) { double d;int a=5,b=2;d= (double)a/b;printf("d= %G\n",d);//输出2.5d= a/(double)b;printf("d= %G\n",d);//输出2.5 }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-08 15:00:57

来自C标准,第6.3.1.8节:通常的算术转换:

首先,如果任何一个操作数的对应实类型是长双,则另一个操作数被转换成相应的实类型为长双的类型,而不改变类型域。 否则,如果任何一个操作数的对应实类型为双,则另一个操作数将在不改变类型域的情况下转换为相应的实类型为double.的类型。 否则,如果任何一个操作数的对应实类型为float,则另一个操作数将转换为相应的实类型为float的类型,而不改变类型域。 否则,整数提升将在两个操作数上执行。

因此,如果算术运算符的一个操作数是int,而另一个操作数是double,则标准声明结果表达式具有double类型。

票数 4
EN

Stack Overflow用户

发布于 2015-12-08 14:56:41

强制转换优先于除法,doubleint之间的操作将生成double

票数 1
EN

Stack Overflow用户

发布于 2015-12-08 15:01:14

由于评估的必要性,如果一个除法的一个操作数是一个双数据类型,则另一个操作数自动提升为计算方法。在您的示例中,之所以会出现这种情况,是因为显式强制转换的运算符优先级高于除数符。

如果只想转换除法的结果,可以这样做:

代码语言:javascript
复制
d = (double)(a/b);

为了确保首先执行整数除法,然后执行显式强制转换为double。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34158900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档