在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. week1 notebook1

    初识Python 一.python介绍 - 解释器: cpython(默认使用) ipython(shell) jpython(java) ironpython rubypython - 编码: as ...

  2. merge into语句的使用

    merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入. 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a ...

  3. React+webpack

    webPack + React 步骤: 1. 创建文件夹 src 源代码目录 main.js 打包的入口文件 App.js 项目的根组件 import React,{Component} from ' ...

  4. RAP开发入门-主题更换

    通过配置扩展点修改应用主题    ps:需要提前准备好主题(theme.css)文件   <!-- 注册主题扩展点 -->    <extension          point= ...

  5. MySQL快速创造百万测试数据

    CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `user_id` VARCHAR (20) NO ...

  6. postgreSQL格式化时间的函数详解

    数据类型格式化函数:    PostgreSQL格式化函数提供一套有效的工具用于把各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来 ...

  7. C# 4.0新加特性

    协变和逆变 这个在C#2.0中就已经支持委托的协变和逆变了,C#4.0开始支持针对泛型接口的协变和逆变: IList<string> strings = new List<strin ...

  8. OpenSessionInViewFilter浅谈

    本篇文章转载自--OpenSessionInViewFilter的配置及作用 spring为我们解决hibernate的Session的关闭与开启问题. Hibernate 允许对关联对象.属性进行延 ...

  9. python 整型,布尔值,字符串相关

    1.整型(int) 就是所有整数, 2.布尔值(bool) True False 0,"",[],{},(),none为False 3.字符串(str) 字符: 是单一文字符号 字 ...

  10. 超实用的JavaScript代码段

    1. 判断日期是否有效 JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要.JQuery也有一些第三方库来使日期相关的处理变得简单,但有时你可能只需 ...