float与double内存中的表示
来源:互联网 发布:linux配置ntp时间同步 编辑:程序博客网 时间:2024/06/04 19:45
//
#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
*/
}
- float与double内存中的表示
- float,double等精度丢失问题 float,double内存表示
- !!!float/double在内存中的表示
- float double的内存表示及比较大小的方法
- float double的内存表示及比较大小的方法
- float和double的精度以及在计算机中的表示
- float & double 内存布局
- float & double 内存布局
- float & double 内存布局
- float & double 内存布局
- 内存中的 double 与 十六进制
- float与double转换
- float与double区别
- float与double
- float与double类型的内存分布,精度和范围
- float与double类型的内存分布,精度和范围
- float与double类型的内存分布,精度和范围
- float与double的区别 内存性能开销不同
- C++ 模板函数
- SDUT oj 数据结构实验之查找一:二叉排序树
- 常用框架的说明
- Command Network poj 3164 (最小树形图)
- 全排列
- float与double内存中的表示
- 随机森林原理与应用
- java非静态方法为什么不能被子类覆盖为静态方法
- 二叉树和为某一值的路径
- Java7并发编程--5、并发集合
- Editplus从下载到使用
- exec函数族实例解析
- HDU题目分类
- hdu5804(BestCoder Round #86 A)