一个简单程序员 2022-04-21 11:07 采纳率: 0%
浏览 39

c语言整数转单浮点数输出

uint最大整数根据I3E转成单精度浮点后16进制是0x4F7FFFFF,再转回整数是4294967040
为什么输出反而变大了?


#include <stdio.h>

int main(void) {
    float f1 = 0xffffffff;
    unsigned int umax = 0xffffffff;
    printf(" u is:%u\n",umax); // u is:4294967295
    printf("f1 is:%f\n",f1); //f1 is:4294967296.000000
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-04-21 15:31
    关注

    float最长有效十进制位数=6
    仅供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main() {
        float f;
        double d;
        char bs[65];
        char b[65];
        char s[80];
        unsigned char *p;
        char e[12];
        char *t;
        int ex;
        int flag;
    
        flag=0;
        while (1) {
            printf("Input a float point number or 0xXXXXXXXX or 0xXXXXXXXXXXXXXXXX:");fflush(stdout);
            rewind(stdin);
            fgets(s,80,stdin);
            if ('\n'==s[0]) return 1;
            if (1==sscanf(s,"0x%16I64X",(__int64 *)&d) && strlen(s)>11) {flag=2;break;}
            if (1==sscanf(s,"0x%8X"    ,(  int   *)&f))                 {flag=1;break;}
            if (1==sscanf(s,"%f"       ,           &f)
             && 1==sscanf(s,"%lf"      ,           &d))                 {flag=3;break;}
        }
        if (flag&1) {
            printf("f=%g\n",f);
            p=(unsigned char *)&f;
            printf("hex=%02X %02X %02X %02X\n",p[3],p[2],p[1],p[0]);
            ltoa(*(long *)&f,b,2);
            sprintf(bs,"%032s",b);
            printf("bin=%s\n",bs);
            printf("bin=%.1s %.8s   %s\n",bs,bs+1,bs+9);
            strncpy(e,bs+1,8);e[8]=0;
            ex=strtol(e,&t,2);
            printf("    %c %-4d-127 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+9);
            ex-=127;
            printf("    %c %-8d 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+9);
        }
        if (flag&2) {
            printf("\nd=%lg\n",d);
            p=(unsigned char *)&d;
            printf("hex=%02X %02X %02X %02X %02X %02X %02X %02X\n",p[7],p[6],p[5],p[4],p[3],p[2],p[1],p[0]);
            _i64toa(*(__int64 *)&d,b,2);
            sprintf(bs,"%064s",b);
            printf("bin=%s\n",bs);
            printf("bin=%.1s %.11s   %s\n",bs,bs+1,bs+12);
            strncpy(e,bs+1,11);e[11]=0;
            ex=strtol(e,&t,2);
            printf("    %c %-6d-1023 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+12);
            ex-=1023;
            printf("    %c %-11d 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+12);
        }
    
        return 0;
    }
    //Input a float point number or 0xXXXXXXXX or 0xXXXXXXXXXXXXXXXX:0x3FC0000000000000
    //
    //d=0.125
    //hex=3F C0 00 00 00 00 00 00
    //bin=0011111111000000000000000000000000000000000000000000000000000000
    //bin=0 01111111100   0000000000000000000000000000000000000000000000000000
    //    + 1020  -1023 1.0000000000000000000000000000000000000000000000000000
    //    + -3          1.0000000000000000000000000000000000000000000000000000
    //
    //Input a float point number or 0xXXXXXXXX or 0xXXXXXXXXXXXXXXXX:0x3E000000
    //
    //f=0.125
    //hex=3E 00 00 00
    //bin=00111110000000000000000000000000
    //bin=0 01111100   00000000000000000000000
    //    + 124 -127 1.00000000000000000000000
    //    + -3       1.00000000000000000000000
    //
    //Input a float point number or 0xXXXXXXXX or 0xXXXXXXXXXXXXXXXX:0.125
    //f=0.125
    //hex=3E 00 00 00
    //bin=00111110000000000000000000000000
    //bin=0 01111100   00000000000000000000000
    //    + 124 -127 1.00000000000000000000000
    //    + -3       1.00000000000000000000000
    //
    //d=0.125
    //hex=3F C0 00 00 00 00 00 00
    //bin=0011111111000000000000000000000000000000000000000000000000000000
    //bin=0 01111111100   0000000000000000000000000000000000000000000000000000
    //    + 1020  -1023 1.0000000000000000000000000000000000000000000000000000
    //    + -3          1.0000000000000000000000000000000000000000000000000000
    //
    //Input a float point number or 0xXXXXXXXX or 0xXXXXXXXXXXXXXXXX:
    //
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView