c - printf 十六进制格式的 float 返回随机值

标签 c

尝试以十六进制格式打印 float :

int main() {
    float a = 1.1;
    printf("%f %X\n", a, a);
}

出于某种原因 printf 返回:

1.100000 A878DAC8 // hex number is random every time

应该是3F8CCCCD。为什么会有这样的行为?

最佳答案

Govind Parmar 的回答中给出了对观察到的行为的解释。请注意,假设使用 32 位整数和 float ,您可能会通过此修改后的程序获得预期的行为:

#include <stdio.h>
#include <string.h>

int main() {
    int i;
    float a = 1.1;
    memcpy(&i, &a, sizeof(i));
    printf("%f %X\n", a, i);
    return 0;
}

输出:1.100000 3F8CCCCD

关于c - printf 十六进制格式的 float 返回随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515036/

相关文章:

c - 是否可以在 C 中模拟对象/实例方法?

c - 奇怪的 float 四舍五入

c - 写入文件时出现 "Permission denied"错误,但前提是该文件尚不存在

c - 如果有两个空格,它会算作3个字

c - 此代码中的第二个 scanf 将不会读取。 (C 代码)

c - 在 C 中返回数组,数独求解器

c - pthread_cond_wait 和 pthread_cond_signal 的实现,有什么副作用吗?

c - 求 C 中潜在无限个整数的平均值

c - 有没有办法强制 C 预处理器在宏之前评估宏参数

c - 在 c 中为相同的数学运算得到错误的值?