float与double内存中的表示

来源:互联网 发布:linux配置ntp时间同步 编辑:程序博客网 时间:2024/06/04 19:45
// float与double内存.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <stdio.h>



/*
1.5  (10) = 1.1*2^0  (2)  //0x 3f c0 00 00 /00 00 C0 3F
3    (10) = 1.1*2^1  (2)  //0x 40 40 00 00 /00 00 40 40
0.75 (10) = 1.1*2^-1 (2)  //0x 3f 40 00 00 /00 00 40 3F
*/

//切记float和double是用指数来保存的
// float 类型的内存保存机制


/*
float类型占据4个字节(可以用sizeof关键字求出)内存就占据32位
32位就是0-31; 且把0当做最高位31当做最低位
最高位为1就此浮点数为负否则为正也就是最高位0
跟着的后8位就是阶码跟着阶码后面的就为尾数共23位
*/


void main1() //求出float的内存的大小
{
printf("%d\n",sizeof(float));
}


void main2()
{
float fl=1.5; //此数最高位就为0
printf("%x\n",&fl);


float fl1=-1.5;//此数最高位就为1
printf("%x\n",&fl1);

}


void main()
{
float f1=12.5;
float f2=-12.5;
printf("%p\n",&f1);//0x41480000内存中Hex
printf("%p\n",&f2);//0xB1480000内在中Hex
/*
首先十进制浮点数  整数按照二进制 小数可以通过*2取整来得到
12.5=12+0.5
12二进制就是1100
0.5的二进制是0.5*2=1.0取整就是1 所以1.5的二进制就是1100.1;
1100.1就为二进制再去转换成内存中保存的Hex
浮点数保存时要底数要求是:1<底数<2 =1.1001*2^3
**************************************
1、12.5为整数最高位为0
2、而阶码就是指数+127=127+3=130 把130化作二进制 
//相反如果是二进制推出十进制浮点数 8位阶码的二进制化成十进制就要减去127
3、取二进制后的小数点的数


结果:
  符号位   阶码                尾数
0    10000010     10010000000000000000000


0100 0001 0100 1000 0000 0000 0000 0000
 4   1    4     8    0    0    0    0
******************************************
1、-12.5为整数最高位为1
2、而阶码就是指数+127=127+3=130 把130化作二进制
3、取二进制后的小数点的数


结果:
  符号位   阶码                尾数
0    10000010     10010000000000000000000


1100 0001 0100 1000 0000 0000 0000 0000
   C       1        4         8        0        0        0        0     

*/

}


/*******************************************************************/


#include "stdafx.h"
#include <stdio.h>


// double 类型的内存保存机制


/*
double类型占据8个字节(可以用sizeof关键字求出)内存就占据64位
64位就是0-63; 且把0当做最高位63当做最低位
最高位为1就此浮点数为负否则为正也就是最高位0
跟着的后11位就是阶码跟着阶码后面的就为尾数共52位
*/


void maina()//求出double的内存的大小
{
printf("%d\n",sizeof(double));


}
void mainb()
{
double fl=1.5; //此数最高位就为0
printf("%x\n",&fl);


double fl1=-1.5;//此数最高位就为1
printf("%x\n",&fl1);

}


void main()
{
double f1=12.5;
double f2=-12.5;
printf("%p\n",&f1);//0x4029000000000000内存中Hex
printf("%p\n",&f2);//0xC029000000000000内存中Hex
/*
首先十进制浮点数  整数按照二进制 小数可以通过*2取整来得到
12.5=12+0.5
12二进制就是1100
0.5的二进制是0.5*2=1.0取整就是1 所以1.5的二进制就是1100.1;
1100.1就为二进制再去转换成内存中保存的Hex
浮点数保存时要底数要求是:1<底数<2 =1.1001*2^3
**************************************
1、12.5为整数最高位为0
2、而阶码就是指数+1023=1023+3=1026 把1026化作二进制 
//相反如果是二进制推出十进制浮点数 11位阶码的二进制化成十进制就要减去1023
3、取二进制后的小数点的数


结果:
  符号位      阶码                       尾数
0    10000000010   1001000000000000000000000000000000000000000000000000 


0100 0000 0010 1001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 
    4        0        2        9       0        0        0        0        0         0        0       0        0         0       0        0       0        0
******************************************
1、-12.5为整数最高位为1
2、而阶码就是指数+1023=1023+3=1026 把1026化作二进制
3、取二进制后的小数点的数


结果:
  符号位   阶码                尾数
0    10000000010   1001000000000000000000000000000000000000000000000000 


1100 0000 0010 1001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 
  C        0        2        9       0        0        0        0        0         0        0       0        0         0       0        0    





*/
}

0 0