- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
- 问题**
一些计算给了我错误的答案。有人能告诉我正确的数学运算方法吗?(如对数字使用什么数据类型等)
// setup code
#include <stdio.h>
int num1 = 24;
int num2 = 7;
float result;
// main code
int main() {
printf("this is x:%d\n", num1);
printf("this is y:%d\n", num2);
result = num1 / num2; // this outputs 0
printf("this is int of x/y: %d\n", result);
result = (float) num1 / num2; // this outputs -536870912
printf("this is float of x/y: %d", result);
return 0;
}
// end
第一个输出是0。我原以为是3
第二个输出是-536870912。我原以为是3.42
我试过使用其他数据类型和类型转换,但我不记得它们是什么,这是我想使用的代码无论如何。
1条答案
按热度按时间92dk7w1h1#
你的代码有几个不同的问题。这些问题相互干扰,产生了你所看到的令人惊讶的结果。
直接导致您所看到的怪异行为的问题:
result
被声明为float
,因此在这两种情况下,result = num1 / num2
都将被计算为浮点型,而不是整型。printf
打印浮点数时,必须使用"%f"
,而不是"%d"
。"%d"
用于整型。int和float是用不同的编码存储在内部的,所以如果一个变量是
float
,你告诉printf
它是一个int,反之亦然,printf
不可避免地会显示一堆垃圾。其他问题:
main
内部声明,而不是在main
外部声明。printf
缺少一个\n
,这意味着它可能根本没有打印出来,如果在控制台中打印出来,它会使显示有点混乱。最后,关于铸造和操作顺序的一条警告:
((float) num1) / num2
,而不是(float) (num1 / num2)
,这是因为(num1 / num2)
是整数除法,结果是3
;一旦你有了3
,就太晚了,如果你强制转换成(float)
,你会得到3.0
,而不是3.42
。(float) num1 / num2
时,你知道这是被解释为((float) num1) / num2
还是(float) (num1 / num2)
吗?如果你知道,那很好,但是如果你不知道,那就不要写。正确代码: