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