“大多数 C 系统提供逻辑上无限的浮动值”是什么意思?

PO_*_*PO_ 3 c precision divide-by-zero format-specifiers

最初我将变量 x 和 y 声明为 int 类型:

#include<stdio.h>   

     int main(){
        int x, y = 0 ;
        x = 1 / y;
        printf("%d", x);

        return 0;    
    }
Run Code Online (Sandbox Code Playgroud)

程序崩溃(原因很明显)。

现在我将变量 x 和 y 声明为 double:

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%d", x);

    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

但是输出:0。(为什么?)

然后我在 printf 中将 %d 更改为 %f:

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%f", x);

    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

输出:1.#INF00

我不明白这里发生了什么。

请解释我上面的情况。

dbu*_*ush 6

您可能接触到的大多数系统都使用IEEE 754表示浮点数。该表示具有存储值 +infinity 和 -infinity 的方法。

虽然严格来说,除以 0 是未定义的行为,但使用 IEEE 754 的实现扩展了语言以允许它用于浮点类型。在这种情况下,除以 0 可以被视为无穷大,因此您的实现允许它,这1.#INF00也是 MSVC 打印无穷大值的方式。

此外,在您用于%d打印 a 的第二个示例中,使用错误的格式说明符进行打印double是未定义的行为。格式说明符必须与传入的数据类型相匹配。