我有一个大学的练习,看起来像:
int a = 10;
int b = 3;
double c = a / b;
问题是:哪个值是c。
现在我想说,c是3.3。在计算结果之前,它被隐式转换为double。 但是这个问题的正确答案是根据我的记录3.0。
这是怎么回事?编译器是否真的首先将结果计算为整数,然后在第二步中将其转换为加倍?
或者我是否理解错误?
答案 0 :(得分:6)
编译器是否真的首先将结果计算为整数和 然后在第二步中把它加倍?
是
答案 1 :(得分:3)
编译器是否真的首先将结果计算为整数和 然后在第二步中把它加倍?
是,
运行时首先计算RHS结果,然后将结果转换为double
。现在,由于RHS包含int / int
,因此结果位于int
,您无法获得3.3
。
因此,如果RHS包含double / int
或int / double
,则会在计算结果之前进行类型提升并将RHS操作数提升为double,因此得到3.3
答案 2 :(得分:1)
看看实际发生的是:
double c = (double) a / b; //double of 3 = 3.0
你必须这样做
double c = a/(double)b