一个小测试程序:
#include <iostream>
const float TEST_FLOAT = 1/60;
const float TEST_A = 1;
const float TEST_B = 60;
const float TEST_C = TEST_A / TEST_B;
int main()
{
std::cout << TEST_FLOAT << std::endl;
std::cout << TEST_C << std::endl;
std::cin.ignore();
return 0;
}
结果:
0
0.0166667
在Visual Studio 2008上测试&amp; 2010。
答案 0 :(得分:11)
在
1/60
两个操作数都是整数,因此执行整数运算。要执行浮点运算,至少有一个操作数需要具有浮点类型。例如,以下任何一个都将执行浮点除法:
1.0/60
1.0/60.0
1/60.0
(您可以选择使用1.0f
来避免任何精确度降低警告; 1.0
类型为double
,而1.0f
类型为float
)
TEST_FLOAT
不应该与TEST_C
具有相同的值吗?
在TEST_FLOAT
情况下,执行整数除法,然后在赋值中将整数除法的结果转换为float
。
在TEST_C
案例中,当整数文字1
和60
被分配到float
和TEST_A
时,它们会转换为TEST_B
;然后对这些浮点数执行浮点除法,并将结果赋值给TEST_C
。
在编译时或运行时是否解析了
TEST_C
值?
这取决于编译器;任何一种方法都符合标准。