c - C 上的浮点表示错误

标签 c floating-point

所以我想用C语言验证数字1.0的十六进制表示,下面是我的代码:

int main(int argc, char **argv)
{
    void showBytes(unsigned char * p,int size){
        int i;
        for (i=0;i<size;i++){
            printf("%.2x",p[i]);
        }
    }

    float f;
    f=1.0;
    showBytes((unsigned char *)&f,sizeof(f));
    return 0;
}

当我构建并运行我的程序时,我得到 39300000,这不是 1.0(00003039) 的正确表示。任何人都可以向我解释为什么我得到这个不正确的值吗?谢谢!!!

最佳答案

这是字节顺序不匹配。您正在使用一种字节顺序约定显示值,但您的期望值使用另一种约定。

字节序是整数数据类型的一个众所周知的问题,但可能不太为人所知的字节序也会影响浮点表示。

关于c - C 上的浮点表示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045322/

相关文章:

floating-point - go中的浮点运算

c++ - 是否存在编译时 logb/ilogb?

C - 递增和递减指针,然后检索值

c - 致命信号 11 退出状态

c - 这两个实现之间有区别吗?

python - 在字典中对小数进行排序

PHP - 序列化 float

c - 处理小数的简单 C 程序

c - C语言中最大/最小 bean 杯算法 - easy game

c++ - 当两者都是变量时如何将 float 除以整数?