奇怪的是,C
Odd casting curiosity in C
我是计算机编程的初学者,只用基本语言做了几年,现在我正在学习C和C++等更复杂的语言。
我在C中发现了一些东西,我无法理解它。我不会放过它,因为那些突然出现在我脑海中并没有解决的事情永远不会解决。这是我开始写的代码:
#include <stdio.h>;
#include <math.h>;
#define pi 3.14
#define abs(v)(v<0?-v:v)
int main()
{
printf("%d",(int)ceil(abs(pi)));
}
现在,这是我的思考。为什么这个,
printf("%d",(int)ceil(abs( pi )));
返回4
但当我把铸造操作员这样放置时:
printf("%d",ceil((int)abs( pi )));
它返回0?
这对我来说毫无意义,因为无论哪种方式,它都应该返回4,因为(int)abs(pi)返回3,但它仍然是前面提到的。所以本质上,它应该说,好吧,我已经抓住了3作为abs(pi)的投射int,现在我已经收到了它,所以它应该返回4。
但没有,它返回0。
不应该
(int) ceil(abs( pi ))
相当于
ceil( (int) abs( pi ) ) ? ?
如果编程可以像说"做这件事"一样简单,然后突然间一切都完美地工作了就好了。
尝试更改:
printf("%d",ceil((int)abs( pi )));
至:
printf("%f",ceil((int)abs( pi )));
您当前的问题几乎肯定源于这样一个事实,即ceil
返回double
,但您告诉printf
期望int
。
当然,对于C++,跳过所有这些并使用:
std::cout << ceil((int)abs( pi ));
或:
std:cout << ceil(static_cast<int>(abs(pi)));
并让编译器跟踪转换的正确类型。
就其价值而言,我希望它能产生3
,而不是4
。对int
的转换将把Pi截断为3
。然后,它将被转换为替身。由于它没有小数部分,它的ceil
将保持为3
。
相关文章:
- 没有找到相关文章