12345678900(十进制)=>
1011011111110111000001110000110100(34位精确值)
========>
符号位:0
+127
指数:33(100001=>00100001 =====> 10100000
原码 阶码(移码)
尾数:1.01101111111011100000111(取24位)
=>(注意:前面的1在实际存放时为了多存放一位而隐含,即浮点数的尾数的最高位永远隐含为1)
0 10100000 01101111111011100000111(实际放了尾数后面的23位)
指数 尾数
最后结果就是01010000001101111111011100000111
现在再把它还原成整数:
(1)取尾数23位:01101111111011100000111
(2)在前面加上隐含的1,变成:101101111111011100000111
(3)取指数8位:10100000
(4)指数减127得:100001(33)
(5)尾数向左移动10位(尾数本身23位,33-23=10):1011011111110111000001110000000000
此即12345678848
#define uchar unsigned char
#define uint unsigned int
#include <stdio.h>
void FtoC(void)
{
float a ;
uchar i,*px;
uchar x[4]; /*定义字符数组,准备存储浮点数的四个字节 */
void *pf;
px=x; /* px指针指向数组x */
pf=&a ; /*void 型指针指向浮点数首地址*/
a=34.526 ;
for(i=0;i<4;i++)
{
*(px+i)=*((char*)pf+i);
/*强制void 型指针转成char型,因为*/
} /*void型指针不能运算*/
for(i=0;i<4;i++) printf("%d",x); /* */
}
main()
{
FtoC() ;
getch();
}
可以用这个程序得到 浮点数转变为 IEEE的标准存放格式
评论