C语言上的浮点表示错误

C语言上的浮点表示错误,c,floating-point,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; showByt

因此,我想验证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;
}
int main(int argc,char**argv)
{
void showBytes(无符号字符*p,整数大小){
int i;

对于(i=0;i这是endianness不匹配。您使用一种endianness约定显示值,但预期值使用另一种约定


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

我假设您使用的是允许嵌套函数的。我可以问一下为什么吗?嗯,1.0f应该是
0x3F800000
。应该使用size\u t来表示大小而不是int。@Adrian:为什么删除了
{
并引入语法错误?为什么你要通过移动空格来改变他人编写代码的方式,使之符合你自己的见解?编辑不仅仅是为了这个目的。
0x39300000
是1.678466796875E-4。这还不能解释
0x3F800000
0x39300000
@glglglgl否之间的差异,这没有多大意义nse我同意。问题中的代码在我的小endian机器上输出
000080F
。我想知道问题中声明的输出是否实际上是错误的。@DavidHeffernan:你是对的,我给出了错误的值…我在运行程序时也得到了000080F。这确实是由不同的endian约定造成的,谢谢!!!