您的位置:首页 > 其它

浮点数的内存存储方式

2008-05-18 16:54 323 查看

#define GET(p) (*(p) | (*(p+1) << 8) | (*(p+2) << 16) | (*(p+3) << 24))




void printb(unsigned int n)




...{




unsigned char B[32] = ...{0,};


bool flag = false;




int j = 0;


for (int i=31;i>=0;i--)




...{


unsigned int p;


p = n << 31 - i >> 31;




if (!flag)




...{


if (p == 1)




...{


flag = true;


}


}




if (flag)




...{


B[j] = (p == 1)?'1':'0';


j ++;


}


}


printf("%s",B);


}




int main(int argc, char* argv[])




...{


float f = -289.95;




//单精度浮点


unsigned int sign;//符号


unsigned int significand;//有效位


unsigned int exponent;//指数


unsigned int floatbyte;


unsigned char * pfloat = (unsigned char*)&f;




floatbyte = GET(pfloat);




sign = floatbyte >> 31;


exponent = floatbyte << 1 >> 24;


significand = floatbyte << 9 >> 9;




printf("符号位:");


printb(sign);


printf(" 指数位:");


printb(exponent);


printf(" 有效位:");


printb(significand);




//输出结果


printf(" 单进度浮点数为:");


if (sign == 1)




...{


printf("-");




} else...{


printf("+");


}




printf("1.");


printb(significand);




//这里只讨论指数为规范化值的情况,对于零和无穷大不讨论


if (int(exponent - 127) > 0)




...{


printf(" >> %d ",exponent - 127);




} else ...{


printf(" << %d ",127 - exponent);


}




return 0;


}



以上代码只为了演示单精度浮点数在内存中的存储方式,双精度也类似。想了解更多,请参照IEEE Standard 754 Floating-Point标准。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: