【发布时间】:2014-12-21 09:00:25
【问题描述】:
float 和 int 类型都是 4 个字节,我尝试用这种方式转换:
unsigned int x = 0; // 00000000
x = ~x>>1; // 7fffffff
float f = *((float *)&x);
printf("%f\n", f);
因为c浮点数的第一位代表+/-,接下来的8位是2^(exp-127)中的exp,其余的将转换为0.xxxxx...,这意味着我可以获得最大浮点数:@987654326 @ 但最后我得到了nan。
那么有什么问题吗?
【问题讨论】:
-
您正在对平台上浮动的表示进行假设。不管怎样,你为什么要这样做——你以后写这种代码会遇到很多问题
-
@EdHeal 我想他想学习浮点格式。
-
@ikh - 这取决于平台
-
@ikh 是的~所以这让我很困惑
-
2 点 1. 浮点值与整数值的存储方式有何不同,因此使用指向 int 的浮点指针并不好。 2.你有一个错误的格式说明符来打印浮点值,这将导致 UB