windows下cfree5中%d输出浮点数的问题

最近写了一段代码

#include<stdio.h>

int main(){
    float a = 9.0;
    printf("%d",a);
    return 0;
}

根据浮点数的转换公式:得出符号位为 0,有效位为 1.001,指数为 3。

所以得到的32位二进制应该为 0100 0001 0001 0000 0000 0000 0000 0000,转换为十进制是 1091567616,但程序的运行结果是 0。

去网上查了一下资料以后发现变量在printf函数中会发生上转,即float变量在入栈的时候作为一个double变量压入了8个字节。所以存储的数据应该是 0100 0000 0010 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000。又因为我的电脑是小端序的,存储数据的时候数据的低位放在内存低位。因此按格式符%d输出的时候,从内存低位读取4个字节后得到的是 0000 0000 0000 0000 0000 0000 0000 0000,转换成十进制是 0。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页