我有一个非常简单的C程序。
int main(void){
double sum = 1/2;
printf("%d\n", sum);
return 0;
}
为什么会返回类似" -2030243223"?
的数字为什么每次运行程序时这个数字都会改变?
我尝试过使用int&float,但我似乎无法将输出设为0.5!
答案 0 :(得分:11)
使用%f
打印double
,而不是%d
。后者导致未定义的行为。
表达式1/2
使用整数除法产生0
,因此要获得.5
,请使用1/2.
(注意尾随句点)。
最后,要实际获取.5
而不是0.500000
之类的内容,请指定精度:
printf("%.1f\n", sum);
答案 1 :(得分:5)
您将IEEE floating-point number传递给printf
,但告诉它是一个整数。
更改
printf("%d\n", sum);
到
printf("%f\n", sum);
如其他评论中所述,您可能还想进行浮点除法而不是整数除法。 1/2
为零;你正在划分两个整数,所以结果是一个整数(是的,即使你将它分配给一个浮点变量 - 每个表达式的类型都是孤立地确定的)它必须丢弃其余的。你可能想要1.0/2
;如果任一项是浮点数,那么结果是浮点数,所以你得到0.5。
答案 2 :(得分:3)
您正在尝试将双精度打印到整数。 (%d)。
尽管它们都是数字,但内部存在巨大差异,例如记忆差异。
答案 3 :(得分:3)
您正在尝试将double打印为int。尝试使用:
printf("%g\n");
另外,你想要初步划分1.0 / 2.0,否则你会得到0。
答案 4 :(得分:2)
试试这个:
int main(void){
double sum = 1.0/2.0;
printf("%10.3f\n", sum);
return 0;
}
答案 5 :(得分:1)
您的代码存在一些问题
int main(void){
// you need to divide a double by a double, not two ints
double sum = 1.0/2.0;
// %d is for int, not doubles. You use %f in the case of printing a double
printf("%f\n", sum);
return 0;
}
现在,如果你真的想要将变量打印为int,可以通过执行sum
将变量printf("%d\n", (int)sum);
转换为int,但是你会遇到舍入问题。
答案 6 :(得分:0)
尝试以下方法:
printf("%f\n", sum);
%d是整数的占位符,也许已打印出sum的地址^^
答案 7 :(得分:0)
糟糕的格式不能是完整的答案,因为:
double
应为零,存储为0x0000000000000000,无法显示为“-2030243223”(0x86FCF269)。所以必须有其他的东西,例如缺少标头的事实:我猜编译器不知道printf
是一个可变参数函数,并试图通过浮点寄存器传递参数。
printf
,作为一个可变函数,可能会尝试从堆栈中读取其输入值,因此是垃圾。