最初我将变量 x 和 y 声明为 int 类型:
#include<stdio.h>
int main(){
int x, y = 0 ;
x = 1 / y;
printf("%d", x);
return 0;
}
程序崩溃了(出于明显的原因)。
现在我将变量 x 和 y 声明为 double:
#include<stdio.h>
int main(){
double x, y = 0 ;
x = 1 / y;
printf("%d", x);
return 0;
}
但输出:0。(为什么?)
然后我在 printf 中将 %d 更改为 %f:
#include<stdio.h>
int main(){
double x, y = 0 ;
x = 1 / y;
printf("%f", x);
return 0;
}
输出:1.#INF00
我不明白这里发生了什么。
请解释一下以上案例。
您可能接触到的大多数系统都使用IEEE 754 https://en.wikipedia.org/wiki/IEEE_754浮点数的表示。该表示有方法存储值+无穷大和-无穷大。
严格来说,除以 0 是未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior,使用 IEEE 754 的实现扩展了语言以允许它用于浮点类型。在这种情况下,除以 0 可以被认为是无穷大,因此您的实现允许它,并且1.#INF00
这就是 MSVC 打印无穷大值的方式。
另外,使用错误的格式说明符进行打印,如您使用的第二个示例中所示%d
打印一个double
是未定义的行为。格式说明符必须与传入的数据类型匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)