我不明白为什么输出在以下示例之间是双倍的。在以下方面:
发布于 2015-12-08 15:00:57
首先,如果任何一个操作数的对应实类型是长双,则另一个操作数被转换成相应的实类型为长双的类型,而不改变类型域。 否则,如果任何一个操作数的对应实类型为双,则另一个操作数将在不改变类型域的情况下转换为相应的实类型为double.的类型。 否则,如果任何一个操作数的对应实类型为float,则另一个操作数将转换为相应的实类型为float的类型,而不改变类型域。 否则,整数提升将在两个操作数上执行。
因此,如果算术运算符的一个操作数是int,而另一个操作数是double,则标准声明结果表达式具有double类型。
发布于 2015-12-08 14:56:41
强制转换优先于除法,double和int之间的操作将生成double。
发布于 2015-12-08 15:01:14
由于评估的必要性,如果一个除法的一个操作数是一个双数据类型,则另一个操作数自动提升为计算方法。在您的示例中,之所以会出现这种情况,是因为显式强制转换的运算符优先级高于除数符。
如果只想转换除法的结果,可以这样做:
d = (double)(a/b);为了确保首先执行整数除法,然后执行显式强制转换为double。
https://stackoverflow.com/questions/34158900
复制相似问题