C++ *1.0在此代码中起什么作用?
以下是检查数字是否为素数的代码:C++ *1.0在此代码中起什么作用?,c++,visual-studio-2010,primes,C++,Visual Studio 2010,Primes,以下是检查数字是否为素数的代码: bool IsPrime(int num) { if(num<=1) return false; if(num==2) return true; if(num%2==0) return false; int sRoot = sqrt(num*1.0); for(int i=3; i<=sRoot; i+=2) { if(num%i==0)
bool IsPrime(int num)
{
if(num<=1)
return false;
if(num==2)
return true;
if(num%2==0)
return false;
int sRoot = sqrt(num*1.0);
for(int i=3; i<=sRoot; i+=2)
{
if(num%i==0)
return false;
}
return true;
}
bool-IsPrime(int-num)
{
如果(num乘以1.0
将num
强制为double
。您可以通过显式强制转换执行相同操作。它执行num x 1.0,因此如果num为5,则为5 x 1.0
sqrt()方法以double作为参数,在num*1.0
中取5.0,num
首先提升为double
,因此结果是double
,然后传递到double sqrt(double)
。否则,您可能需要使用sqrt(static_cast(num))
通常,您不需要强制转换,因为存在从int
到double
的隐式强制转换。请参阅。如果没有它,您可能会得到一个不明确的重载编译器错误。实际上,它将int
强制转换为double
。在我看来,这不是最清晰的方式。只是静态强制转换
它。@GManNickG-它将int
转换为double
。此代码中没有强制转换。@KhoderSarm编译器将结果向下协调为int
,截断小数部分。@KhoderSarmsqrt
接受一个double并重新返回一个double。*1.0
将参数强制转换为double,这没有任何意义ng与返回类型有关。由于sRoot
是一个int,因此sqrt
的返回值将从双精度转换为int。@Khoder可以通过截断小数部分将浮点值隐式转换为整数值。编译器应该对此发出警告。@MohammadAliBaydoun-返回值将被转换为d、 强制转换是您在代码中编写的命令编译器进行转换的东西。@PeteBecker对了,我一直忘了这个区别。