#include
int main(int argc, char *argv[])
{
const float f = -12345678901234567890.789123f;
const int i = *(int *)&f;
bool bF = (i&0x80000000)>>31;
int iDecCount = ((i&0x7f800000)>>23)-127;
unsigned long long iAllData = (i&0x7fffff)|0x800000;
int iDecLen = 23-iDecCount;
unsigned long long iData = 0;
if (iDecLen >= 0)
{
iData = iAllData >> iDecLen;
}
else
{
iData = iAllData << -iDecLen;
}
unsigned long long iDec = 0;
// 算小数
{
int iMul = iDecLen<13?iDecLen:13;
unsigned long long iMax = 1;
for(int i=0; i {
iMax *= 10;
}
iMax /= 2;
int iSub = iAllData << (32-iDecLen-1);
for(int i=0; i {
iSub = iSub << 1;
if (iSub&0x80000000)
{
iDec += iMax;
}
iMax /= 2;
}
}
printf("%f 解析(指数:%d): %c%llu.%llu\n", f, iDecCount, bF?'-':'+', iData, iDec);
return 0;
}
阅读(319) | 评论(0) | 转发(0) |