gpt4 book ai didi

c - C 中的整数和 float 除法

转载 作者:行者123 更新时间:2023-12-02 00:55:47 26 4
gpt4 key购买 nike

谁能告诉我为什么会这样......我使用最新的 GCC 编译器编译并执行了它。

请不要给出诸如“用 %f 代替 %d”之类的建议。

#include <stdio.h>

int main(void)
{
printf("%d" , 3.0 / 2.0);
return 0;
}

预期输出:1

给出输出:0

#include <stdio.h>

int main(void)
{
printf("%f" , 3 / 2);
return 0;
}

预期输出:1.000000

给出输出:0.000000

最佳答案

在第一种情况下,当格式说明符需要 int 时,您传递类型为 double 的表达式,在第二种情况下,您传递类型为 的表达式>int 当格式说明符需要一个 double 时。

使用错误的格式说明符调用 undefined behavior按照 C 标准的规定,这意味着您无法可靠地预测程序的行为方式。不同的编译器可能以不同的方式表现未定义的行为,以及同一编译器上的不同优化设置。

试图通过推理消除未定义的行为没有任何意义。只需确保您的程序运行良好,在本例中这意味着使用正确的格式说明符。

也就是说,x86 系统的编译器通常在浮点寄存器中传递浮点参数,而在堆栈中传递整数。因此,当 printf 尝试读取给定类型的参数时,它最终会读取恰好在其查找位置的任何垃圾,因为实际参数根本不存在。

关于c - C 中的整数和 float 除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com