在32位环境下, float占用32位,double占用64位,

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和  
   
  尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:  
   
                    符号位     阶码   尾数   长度  
  float            1              8         23       32  
  double       1            11         52       64

下面分别举例说明:

将100分别转化为float型和double型的二进制表达。

100=(1+1/2+1/16)*2^6

转为float型为

100为正数,符号位为0,

阶码,一共8位,因为指数可以为负,为了便于计算,规定都先加上127,在这里6+127=133转为二进制为10000101

尾数转为1.1001,因为最高位的1 不写入内存,则尾数转为23位二进制为10010000000000000000000

合在一起就是01000010110010000000000000000000

转为double型为

100为正数,符号位为0,

阶码,一共11位,因为指数可以为负,为了便于计算,规定都先加上1023,在这里6+1023=1029转为二进制为10000000101

尾数转为1.1001,因为最高位的1 不写入内存,则尾数转为52位二进制为1001000000000000000000000000000000000000000000000000

合在一起就是0100000001011001000000000000000000000000000000000000000000000000

将float转为二进制字符串

  1. //str should have at least 33 byte.
  2. void floattostr(float* a, char* str){
  3. unsigned int c;
  4. c= ((unsigned int*)a)[0];
  5. for(int i=0;i<32;i++){
  6. str[31-i]=(char)(c&1)+'0';
  7. c>>=1;
  8. }
  9. str[32] = '\0';
  10. }

将double转为二进制字符串

  1. //str should have at least 64 byte.
  2. void doubletostr(double* a, char* str){
  3. long long c;
  4. c= ((long long*)a)[0];
  5. for(int i=0;i<64;i++){
  6. str[63-i]=(char)(c&1)+'0';
  7. c>>=1;
  8. }
  9. str[64] = '\0';

将32位二进制字符串转为float

  1. float strtofloat(char * str){
  2. unsigned int flt = 0;
  3. for(int i=0;i<31;i++){
  4. flt += (str[i]-'0');
  5. flt <<= 1;
  6. }
  7. dbl += (str[31]-'0');
  8. float * ret = (float*)&flt;
  9. return *ret;
  10. }

将64位二进制字符串转为double

    1. double strtodbl(char * str){
    2. long long dbl = 0;
    3. for(int i=0;i<63;i++){
    4. dbl += (str[i]-'0');
    5. dbl <<= 1;
    6. }
    7. dbl +=(str[63]-'0');
    8. double* db = (double*)&dbl;
    9. return *db;
    10. }

float类型和double类型的二进制存储的更多相关文章

  1. c# float类型和double类型相乘出现精度丢失

    c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...

  2. Python3.x中bytes类型和str类型深入分析

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

  3. 着重基础之—MySql Blob类型和Text类型

    着重基础之—MySql Blob类型和Text类型 在经历了几个Java项目后,遇到了一些问题,在解决问题中体会到基础需要不断的回顾与巩固. 最近做的项目中,提供给接口调用方数据同步接口,传输的数据格 ...

  4. MIME类型和Java类型

    MIME类型和Java类型 类型转换Spring Cloud Stream提供的开箱即用如下表所示:“源有效载荷”是指转换前的有效载荷,“目标有效载荷”是指转换后的“有效载荷”.类型转换可以在“生产者 ...

  5. DATETIME类型和BIGINT 类型互相转换

    项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========= ...

  6. Timestame类型和String 类型的转化

    Timestame类型和String 类型的转化 String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-M ...

  7. Date类型和Long类型的相互转换

    Date类型和Long类型的相互转换: import java.text.SimpleDateFormat; import java.util.Date; public class T { publi ...

  8. java中XMLGregorianCalendar类型和Date类型之间的相互转换

    import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...

  9. 关于 Go 中 Map 类型和 Slice 类型的传递

    关于 Go 中 Map 类型和 Slice 类型的传递 Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Printl ...

随机推荐

  1. BZOJ3573: [Hnoi2014]米特运输(树上乱搞)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1669  Solved: 1031[Submit][Status][Discuss] Descript ...

  2. Java基础8一面向对象

    一.JavaBean标准的定义规范 1.类中所有的属性必须是私有的,也就是说属性必须用private修饰. 2.提供一个公共无参数的构造方法. 3.为所有私有的属性提供公共的set和get方法. se ...

  3. Android媒体解码MediaCodec,MediaExtractor

    Android提供了MediaPlayer播放器播放媒体文件,其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装,方便使用.但是 ...

  4. EF Code First连接现有数据库

    作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...

  5. UWP 协议启动

    1.创建通过协议启动的项目 AppDemo 2.在项目的Package.appxmanifest 文件里 Extensions 目录下 <Extensions> <uap:Exten ...

  6. Qt5 webview加载本地网页

    文件结构 qtchart.pro QT += core gui webkitwidgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET ...

  7. 决策树构建算法之—C4.5

    这个网站值得收藏一下,原文链接:http://shiyanjun.cn/archives/428.html 决策树算法的优越性在于:离散学习算法进行组合总可以表达任意复杂的布尔函数,并不受数据集的限制 ...

  8. DNS解析过程详解(转载)

    DNS解析过程详解(转载) DNS Domain Name System 域名系统,它就是根据域名查出IP地址.    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址ww ...

  9. jmeter的组成

    1.jmeter的组成 线程组:控制多线程并发 断言:预期是否与实际结果一致,性能测试经验不建议做断言 定时器:自已操作线程停顿的时间 监听器:调试自已的脚本和对系统的监控 配置原件:配置的插件 后置 ...

  10. Python笔记2----包、模块、库、条件循环

    包.模块.库 包指的是 : 文件夹 模块和库就是.py文件. 其中,库是一些功能相同的模块的集合,其也是模块. 1.import 模块 2.form 库 import 模块 3.import 包.子包 ...