#include <stdio.h>
float u2f(unsigned u)
{
return *(float*)&u;
}
float fpower2(int x)
{
unsigned exp, frac, u;
if (x< -149) { /* 值太小,返回0.0 */
exp = 0;
frac = 0;
}
else if (x< -126) { /* 返回非规格化结果 */
exp = 0;
frac = 0x400000 >> (-x - 127);
}
else if (x< 128) { /* 返回规格化结果 */
exp = x + 127;
frac = 0;
}
else { /* 值太大,返回 +∞ */
exp = 255;
frac = 0;
}
u = exp << 23 | frac;
return u2f(u);
}
int main()
{
int a = 8;
printf("2的%d次方是:%f\n", a, fpower2(a));
printf("十六进制机器数表示为:%#x\n", (int)fpower2(a));
return 0;
}
评论10