最初,我将变量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表示浮点数。该表示形式具有存储值+ infinity和-infinity的方法。
严格来说,除以0等于undefined behavior,使用IEEE 754的实现扩展了该语言,使其可以用于浮点类型。在这种情况下,除以0可以认为是无穷大,因此您的实现允许它,而1.#INF00
是MSVC打印无穷大值的方式。
此外,如在第二个示例中使用%d
打印double
一样,使用错误的格式说明符进行打印也是未定义的行为。格式说明符必须与传入的数据类型匹配。