(int)num / 2.0和(int)(num / 2.0)之间的差异

时间:2019-01-27 18:36:08

标签: c++

有一个我无法理解的表达。我写了一段代码,在某个时候我需要将一个浮点变量x赋给表达式(int)num / 2.0的结果,其中num是一个值305011的整数。我发现(int)num / 2.0给我152506和(int)(num / 2.0)给我152505,当我尝试对它们求和时,出来305010而不是305011。为什么?

2 个答案:

答案 0 :(得分:1)

得到该输出的原因与事实相同的原因:

int main()
{
    int num = 305011;
    cout << num / 2; //152505
    cout << num / 2.0; //152506
}

对于cout << num / 2;,编译器将截断0.5,因为您将一个int除以一个int。

对于cout << num / 2.0;,编译器会舍入0.5,因为编译器实际上会自动进行类型转换num,将其除以2.0,然后将结果重新转换为整数。

根据您的情况,您可以控制何时进行类型转换。除法之前或之后。当您在除法之前键入强制类型转换时,将发生截断。在除法运算符后键入cast时,将发生舍入。

答案 1 :(得分:0)

投射运算符的优先级高于除法运算符。 (https://en.cppreference.com/w/cpp/language/operator_precedence

(int)num / 2.0 首先将num转换为int,然后除以2.0

(int)(num / 2.0)
将num除以2.0,然后转换为整数