gpt4 book ai didi

使用 gcc 将 double 转换为 int 会产生奇怪的结果

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:02 26 4
gpt4 key购买 nike

我有以下程序(koko.c):

#include <stdio.h>
int main(){
double p = 0.1;
printf("%lf, %d\n", 1/p, 1/p);
return 0;
}

如果我尝试使用 gcc koko.c -o koko 编译它,我会得到错误:

koko.c:4:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘double’ [-Wformat=] printf("%lf, %d\n", 1/p, (int) 1/p);

如果我尝试禁用 Wformat(即 gcc koko.c -Wformat=0 -o koko),它会编译,但当我运行它时,我会得到意外的输出:10.000000,-915298312

关于为什么会发生这种情况有什么想法吗?

enter image description here

最佳答案

运算符优先级。

Cast 是比除法优先级更高的运算符,这意味着它首先发生。所以这个:

(int) 1/p

等同于:

((int) 1) / p

结果是 double

你想要这个:

 (int)(1/p)

并启用这些警告! 99.9999% 的时候,编译器比你聪明!

关于使用 gcc 将 double 转换为 int 会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386196/

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