C语言浮点数存储结构
float类型占四个字节,每个字节占8位,总共32位,其内存结构如下图:
31位为符号位:0表示正数,1表示负数
31~23位:共8位表示指数位,内存存储数据从0~2^8-1=255,由于指数可以是正也可以是负,所以指数位采用移位存储表示数据,8位有符号有可表示数据从-128~127,所以指数位表示的实际指数应该是无符号位数减去127,例如0000 0000表示为0-127=-127,1111 1111表示为255-127=128,1000 0001表示为129-127=2
22~0位:共23位表示尾数位,内存存储数据从0~2^23-1=8388607
例如:-1.01*2^3
符号:为1表示负数
指数为:3
尾数为:1.01
由于计算机中只能存储二进制数据,所以十进制数据必须转成二进制数
例如:-8.25=1000.01=-1.00001*2^3
所以 -8.25
符号位为:1
指数位为:3+127=130=10000010
尾数位为:00001,因为尾数位第一个数都为1所以1就省略了
则内存表示为:
代码查看一下:
#include<cstdio>
int main(){
float a=-8.25;
char *p=(char*)&a; //转成字符的方式
for(int i=;i>=;i--){
printf("%02X",*(p+i));
}
printf("\n");
int b=*(int*)&a;
printf("%X\n",b); //转成整形的方式,由于float和int都是4个字节,所以不但心益处的问题
printf("\n");
return ;
}
double类弄内存中存储的原理与float类型是一样的,只不过double类型是用64位来表示的,其存储结构如下:

同样用-8.25=1000.01=-1.00001*2^3来验证
符号位为:1
指数位:由于11位无符号表示数据范围为0-2047,有符号范围为-1023-1024,所示实际值应该要用内存无符号数-1023,例如000 0000 0000为0-1023=-1023 ,111 1111 1111为2047-1023=1024, 100 0000 0010为1026-1023=3,所示-8.25指数位为 100 0000 0010
尾数位为:0000 1000 0000 0000 ...后面全是0,总共52位
则-8.25 double类型为:1100 0000 0010 0000 1000 0000 .......后面全是0,总共64位
十六进制为:C0 20 80 00 00 00 00 00
#include<cstdio>
int main(){
float a=-8.25;
char *p=(char*)&a;
for(int i=;i>=;i--){
printf("%02X",*(p+i));
}
printf("\n");
unsigned long long b=*(int*)&a;
printf("%X\n",b);
printf("\n");
return ;
}
https://blog.csdn.net/whzhaochao/article/details/12885875
C语言浮点数存储结构的更多相关文章
- C语言浮点数存储方式
对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit.其实不论是float类型还是double类型,在计算 ...
- C语言实现链表(链式存储结构)
链表(链式存储结构)及创建 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据.与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其 ...
- 图的存储结构大赏------数据结构C语言(图)
图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- IEEE浮点数float、double的存储结构
众所周知,C的float.VB的Single都是32位浮点数变量类型(也叫单精度浮点数),C的double和VB的Double则都是64位的浮点数变量类型(也叫双精度浮点数).有些编译器还支持更屌的l ...
- C语言解释器的实现--存储结构(一)
目录: 1. 内存池 2. 栈 3. Hash表 1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面.但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的.至 ...
- 图的存储结构与操作--C语言实现
图(graph)是一种比树结构还要复杂的数据结构,它的术语,存储方式,遍历方式,用途都比较广,所以如果想要一次性完成所有的代码,那代码会非常长.所以,我将分两次来完成图的代码.这一次,我会完成图的五种 ...
- iOS开发系列--C语言之存储方式和作用域
概述 基本上每种语言都要讨论这个话题,C语言也不例外,因为只有你完全了解每个变量或函数存储方式.作用范围和销毁时间才可能正确的使用这门语言.今天将着重介绍C语言中变量作用范围.存储方式.生命周期.作用 ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
随机推荐
- SpringCloud中eureka配置心跳和剔除下线的服务的时间
在默认的springCloud中eureka注册中心在服务下线时表现的非常不灵敏,用惯了dubbo的zk注册中心表示很不习惯,eureka设计的本意是在服务不会频繁上下线和网络稳定的内网,这种设计在生 ...
- 转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友
看到有人在ps区咨询如何安装3d max教程,当你进行第一步之前,请先断开网络连接第一步:运行安装程序 第二步:接受安装协议,点击下一步会提示输入序列号 第三步:你会看到已经安装完成了的界面 第四部: ...
- 转:ArcEngine10.0+VS2010+MFC 扫盲贴 .
项目用vc6.0+MapObject写的,现在却要升级成AE10,研究了好多天的AE10.0和c++,中间的曲折也不想多说了,废话少数,下面是实现ArcEngine基本功能的,仅供参考,如能帮到同仁们 ...
- Android短信管家视频播放器代码备份
自己保留备份,增强记忆 这是video的类 public class VideoActivity extends Activity { /** * 解析网络页面 */ private WebVie ...
- (原+译)pytorch中保存和载入模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8108466.html 参考网址: http://pytorch.org/docs/master/not ...
- sqlserver查询数据表中每个类别最新的一条记录
表tariff_info, 原始数据: 想要的结果:以start_time时间倒序排序, 以code分类, 查询每一类最新的一条记录 sql: SELECT a.* FROM TARIFF_INFO ...
- 1A2B猜数字
知乎链接 维基百科 问题描述 又名猜数字. 一方准备从0到9十个数字里抽出4个数,随机排列,另一方同样以这样的方法回应四个数.位置相同数字相同为A,数字出现,位置不同为B,然后计数. 例1234 56 ...
- Python实现鸢尾花数据集分类问题——使用LogisticRegression分类器
. 逻辑回归 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 概率p与因变量往 ...
- 使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置
spring-import 标签的解析.使用案例: 对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分 ...
- 信号量 Linux函数 semget();semctl();semop();(转)
本文出自:http://blog.csdn.net/ta893115871/article/details/7505560 Linux进程通信之信号量 信号量(semaphore)是变量,是一种特殊的 ...