有一段时间,我发现自己舍入了一些数字,我总是要将结果转换为整数:
int rounded = (int) floor(value);
Run Code Online (Sandbox Code Playgroud)
为什么所有舍入函数(ceil(),floor())都返回一个浮点数,而不是一个整数?我发现这非常不直观,并且希望得到一些解释!
为什么表达式i = 2返回2?这基于什么规则?
printf("%d\n", i = 2 ); /* prints 2 */
在Java/C#中花了很长时间后,我在C域.原谅我的无知.
在我的代码中包含了一些数学,我偶然发现了常量"PI".至少在我的Xcode版本4.6中我可以使用其中任何一个.但是pi和之间有什么区别M_PI?关于该主题的文档有点紧张.
正如这里的答案所建议的那样,我转过头来-Wbad-function-cast看看我的代码是否有任何gcc可以捕获的不良行为,并且它出现了这个例子:
unsigned long n;
// ...
int crossover = (int)pow(n, .14);
Run Code Online (Sandbox Code Playgroud)
(这不是关键在这里,crossover是int,它可能是unsigned long该消息将是相同的).
这似乎是一个非常普通和有用的演员的例子.为什么这有问题?否则,是否有理由保持此警告开启?
我一般都喜欢设置很多警告,但我无法围绕这个用例.我正在处理的代码是大量的数字,并且很多时候根据需要将事物从一种类型转换为另一种类型以满足所涉及的算法的不同需求.