一段用来检测编辑器存储方式的程序

 //date : 2013/8/16
//designer :pengxiaoen
//function check the C programmable language system #include "stdio.h"
#include "string.h" typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, int len)
{
int i ;
for(i=;i<len;i++)
printf("%.2x",start[i]);
printf("\n"); system("pause");
} void show_int (int x)
{
show_bytes((byte_pointer)&x, sizeof (int));
} void show_float (float x)
{
show_bytes((byte_pointer)&x, sizeof (float));
} void show_double (double x)
{
show_bytes((byte_pointer)&x, sizeof (double));
} //void show_pointer (void *x)
//{
// show_bytes((byte_pointer)&x, sizeof(void *));
//} int main ()
{
int i=;
int ival;
float fval;
double dval;
// int *ip; ival = i;
// ip = &i;
fval = (float)ival;
dval = (double)ival; show_int (ival);
show_float (fval);
show_double(dval);
// show_point (ip);
}

中间的指针一段不知道为什么我的dev 显示连接错误。所以就先屏蔽掉了。在目前讨论的话题之外,先搁置。

显示的结果

分析:  i=12345;转换成十六机制就是 0x3039  说明我这个是个小端机;

好,现在将数据读出来 (00 00 30  39 )16 = (0000  0000  0000  0000  1  0000  0011  1001)2

(46 40 E4 00 )16 =  (0100  0110  100  0000 1110  01   000)2

(40 C8 1C 80)16 =   (0100  0000  1100  1000  0001  1100  000  0000  ...................)

int float double  存储格式 这本《深入理解计算机系统》第二版   第三十页,突然中止讨论了,下面如果还有再补上。

补充 1: 先看46 40 E4 00

红色部分前面加上一个1就成了12345.

第一个bit为0 表示  数据为正

第一个红色bit 与第一个bit之间的 8个bit 为 100 0110 0 = 140

再看 (00 00 30  39 )16 = (0000  0000  0000  0000  1  0000  0011  1001)2部分

转化成科学计数法 1.1 0000 0011 1001 * 2^13.

因为二进制科学计数法小数点前面一位恒为1,所以就省略存储。只需要存储

1 0000 0011 1001 00 0000 0000。     精确到小数点后的十八位   (2^-18)

存储幂数 13   的位置在第一个bit 也就是符号位,和有效位之间的那8个bit

实际存储时 在原有的幂数基础上加了127 也就是  111 1111  。

最后看   (40 C8 1C 80)16 =   (0100  0000  1100  1000  0001  1100  000  0000)2 部分

第一个bit也就是第63个bit     是0 表示是正数

第 62bit 至52bit 100 0000 1100 = 1036               幂数13= 1036-1023

后面的存储格式和float 的相同,只是精度加大了。

而 13 + 127 = 140 所以这8 个bit存储的是140 。至于为什么要加上127。double中为什么要加上一个1023.    这个还么有找到答案。如有幸看到相关资料或者是网友指点迷津,再补充

补充二:

先看下面一个小段的程序

 //date : 2013/8/16
//designer :pengxiaoen
//function : check the momery ,how did it to save the number of float #include "stdio.h"
#include "string.h" typedef unsigned char *byte_pointer; int main()
{
int m;
int i ;
float f= 1.0;
byte_pointer bp;
printf("the number is %f\n",f); bp = (byte_pointer)&f;
i = sizeof (f);
for(m=;m<i;m++)
printf("%.2x",bp[m]);
printf("\n"); system("pause");
}

执行结果

如果将第15行进行修改 赋值为-1

好,现在可以分析了

(1)d = (3f 80 00 00 )h = (0011 1111 1000 0000 0000 0000 0000 0000)b

(-1)d = (bf 80 00 00)h = (1011 1111 1000 0000 0000 0000 0000 0000)b

第一个是符号位,上面已经介绍了,不作赘述。011 1111 1 = 127 代表 幂数为0 ,有效位为0

float 类型在存储幂数的时候加上了127 就可以让幂数范围控制在了 -127 ~ 128 之间

double类型类似的将幂数范围控制在  -1023 ~ 1024 之间

综上所述  float 类型存储占用32bit  依次是符号位   第31bit                          表示方式  0 表正数      1表示负数

幂        第30bit ~ 23bit   共8bit  表示方式 (100 0000 + 幂数 -1)

小数部分   第22bit ~ 0bit     共23bit 表示方式(小数部分)整数部分为1,默认,不单独存储。

double类型存储占用64bit  依次是符号位  第63bit                         表示方式 0 表正数,  1 表示负数

幂       第62bit ~ 52bit   共11bit 表示方式 (1000 0000 000 + 幂数 -1)

小数部分    第51bit ~ 0 bit   共52bit 表示方式(小数部分) 整数部分为1 ,默认,不单独存储。

int_float_double数据类型的存储格式。的更多相关文章

  1. Hive学习之路 (六)Hive SQL之数据类型和存储格式

    一.数据类型 1.基本数据类型 Hive 支持关系型数据中大多数基本数据类型 类型 描述 示例 boolean true/false TRUE tinyint 1字节的有符号整数 -128~127 1 ...

  2. Apache Hive (六)Hive SQL之数据类型和存储格式

    转自:https://www.cnblogs.com/qingyunzong/p/8733924.html 一.数据类型 1.基本数据类型 Hive 支持关系型数据中大多数基本数据类型 类型 描述 示 ...

  3. 【转】深入分析 Parquet 列式存储格式

    Parquet 是面向分析型业务的列式存储格式,由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目,最新的版本是 1. ...

  4. 深入分析Parquet列式存储格式【转】

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  5. Parquet列式存储格式

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  6. 深入分析Parquet列式存储格式

    Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...

  7. MySQL性能优化总结

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  8. MySQL性能优化总结(转)https://yq.aliyun.com/articles/24249

    摘要: 一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图:   三.MySQL存储引擎概述 1)MyISAM存储引擎 MyIS ...

  9. Hive笔记——技术点汇总

    目录 · 概况 · 手工安装 · 引言 · 创建HDFS目录 · 创建元数据库 · 配置文件 · 测试 · 原理 · 架构 · 与关系型数据库对比 · API · WordCount · 命令 · 数 ...

随机推荐

  1. Oracle 11g透明网关连接Sqlserver 2000

    一.环境 公司网站系统使用的是IIS + Oracle 但公司某系统使用的是Sqlserver 2000, 但其数据需要做成报表放到网站上,为简化编程,使用Oracle做透明网关,定期从Sqlserv ...

  2. How to access the properties of an object in Javascript

    Javascript has three different kinds of properties: named data property, named accessor property and ...

  3. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  4. PyQt写的浏览单web页面的browser - 开源中国社区

    PyQt写的浏览单web页面的browser - 开源中国社区 PyQt写的浏览单web页面的browser

  5. hdu 3228 (最大流+二分)

    题意:一共有N个城市,一些城市里有金矿,一些城市里有仓库,金矿和仓库都有一个容量,有M条边,每条边是双向的,有一个权值,求将所有金矿里的储量都运送到仓库中,所需要经过的道路中,使最大的权值最小 思路: ...

  6. Network of Schools(强连通分量+缩点) (问添加几个点最少点是所有点连接+添加最少边使图强连通)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13801   Accepted: 55 ...

  7. 概率图模型(PGM)学习笔记(三)模式判断与概率图流

    我们依旧使用"学生网络"作为样例,如图1. 图1 首先给出因果判断(Causal Reasoning)的直觉解释. 能够算出来 即学生获得好的推荐信的概率大约是0.5. 但假设我们 ...

  8. Android中GridView的使用——使用自带的SimpleAdapter(简单适配器)

    GridView一直是一个系统登录后以九宫格方式展现功能子模块的最佳选择,经过试验和网上资料的查阅,现把实现方式总结一下: 一直是通过自定义Adapter方式,在getView()方法中设置图片的显示 ...

  9. 利用Linux命令行进行文本按行去重并按重复次数排序

    最近杂事太多,正事进展缓慢.Fighting! linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去重并按重 ...

  10. hdu1867之KMP

    A + B for you again Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...