gpt4 book ai didi

C float 每次执行都会改变 %d 个值

转载 作者:太空狗 更新时间:2023-10-29 14:50:54 24 4
gpt4 key购买 nike

我尝试使用 %d 打印 float (我知道不应该这样做。但每次重新运行可执行文件时,它都会给出不同的值)
我的问题是:为什么打印的值每次都改变?我的系统:Ubuntu 14.04(64 位)编译器:4.8.4这是代码:

#include<stdio.h>

int main(){
float b = 12.3456;

printf("%d\n",b);

}

示例输出:

4bh1@mybox:~/C-fi$ ./test 
-1629995944
4bh1@mybox:~/C-fi$ ./test
1147348376
4bh1@mybox:~/C-fi$ ./test
-1746005432
4bh1@mybox:~/C-fi$ ./test
510102216
4bh1@mybox:~/C-fi$

最佳答案

printf 使用错误的格式说明符是 undefined behavior 的经典示例.这意味着行为是不可预测的,并且不能依赖于从一次运行到下一次运行是一致的。它可能会崩溃,它可能会打印随机值,或者它可能看起来正常工作。

实际发生的是相关编译器和架构的实现细节。但是,除非您真的在编写编译器,否则深入研究它没有多大用处。

如果您熟悉汇编程序,您可以查看编译后的代码以了解它生成了哪些指令。但是请记住,不同的编译器(即使是具有不同优化设置的相同编译器)很可能会生成不同的程序集。

关于C float 每次执行都会改变 %d 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38266112/

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