printf 数据输出问题

    float f1 = 0x00000001;
    
    printf("%lf ", f1); // 输出 1.0000000
    printf("%x", f1);   // 输出 0

%X不应该是输出数据的16进制?

阅读 3.1k
3 个回答

%x占位符用于输出无符号整型。你拿来输出浮点型肯定不对啊。

你可以参照:http://www.cplusplus.com/reference/cstdio/printf/

x:是16进制的无符号整数

你第一步已经把 0x00000001转为float了


针对你的更新:

%X不应该是输出数据的16进制

虽然是16进制 但是整数才是重点

你的f1是float

float f1 = 0x00000001;

浮点数在底层运算和整形不一样,浮点数在运算时,有自己独立浮点栈,浮点栈每一寄存器80位,printf("%x"),使用的结果是浮点数直接出站的结果(结果用64位表示),所以并不是32位

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题