float类型和double类型的二进制存储
在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转为二进制字符串
- //str should have at least 33 byte.
- void floattostr(float* a, char* str){
- unsigned int c;
- c= ((unsigned int*)a)[0];
- for(int i=0;i<32;i++){
- str[31-i]=(char)(c&1)+'0';
- c>>=1;
- }
- str[32] = '\0';
- }
将double转为二进制字符串
- //str should have at least 64 byte.
- void doubletostr(double* a, char* str){
- long long c;
- c= ((long long*)a)[0];
- for(int i=0;i<64;i++){
- str[63-i]=(char)(c&1)+'0';
- c>>=1;
- }
- str[64] = '\0';
将32位二进制字符串转为float
- float strtofloat(char * str){
- unsigned int flt = 0;
- for(int i=0;i<31;i++){
- flt += (str[i]-'0');
- flt <<= 1;
- }
- dbl += (str[31]-'0');
- float * ret = (float*)&flt;
- return *ret;
- }
将64位二进制字符串转为double
- double strtodbl(char * str){
- long long dbl = 0;
- for(int i=0;i<63;i++){
- dbl += (str[i]-'0');
- dbl <<= 1;
- }
- dbl +=(str[63]-'0');
- double* db = (double*)&dbl;
- return *db;
- }
float类型和double类型的二进制存储的更多相关文章
- c# float类型和double类型相乘出现精度丢失
c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...
- Python3.x中bytes类型和str类型深入分析
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- 着重基础之—MySql Blob类型和Text类型
着重基础之—MySql Blob类型和Text类型 在经历了几个Java项目后,遇到了一些问题,在解决问题中体会到基础需要不断的回顾与巩固. 最近做的项目中,提供给接口调用方数据同步接口,传输的数据格 ...
- MIME类型和Java类型
MIME类型和Java类型 类型转换Spring Cloud Stream提供的开箱即用如下表所示:“源有效载荷”是指转换前的有效载荷,“目标有效载荷”是指转换后的“有效载荷”.类型转换可以在“生产者 ...
- DATETIME类型和BIGINT 类型互相转换
项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========= ...
- Timestame类型和String 类型的转化
Timestame类型和String 类型的转化 String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-M ...
- Date类型和Long类型的相互转换
Date类型和Long类型的相互转换: import java.text.SimpleDateFormat; import java.util.Date; public class T { publi ...
- java中XMLGregorianCalendar类型和Date类型之间的相互转换
import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...
- 关于 Go 中 Map 类型和 Slice 类型的传递
关于 Go 中 Map 类型和 Slice 类型的传递 Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Printl ...
随机推荐
- P3808 【模版】AC自动机(简单版)
题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本 ...
- Struts2框架学习(三)——配置详解
一.struts.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...
- **PCL:嵌入VTK/QT显示(Code^_^)
中国人真是太不知道分享了,看看这个老外的博客,启发性链接. http://www.pcl-users.org/ 1. 这个是可用的源代码: 原文:I saw a thread with links t ...
- yii处理cookie
/** * 设置用户cookie会话 */ public function setCookie() { //set loginName $cookies = Yii::app()->reques ...
- JDK源码中的英文注释翻译(Class)
public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, Annotat ...
- 主从同步工作过程?(binlog日志)
在从数据库服务器的/var/lib/mysql/master.info 记录连接主数据库服务器信息文件mail-relay-bin.XXXXXX 中继日志文件(记录SQL)mail-relay ...
- Pyhton学习——Day1
1.什么是机器码?什么是字节码?机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据. 通常意义上来理解的话,机器码就是计 ...
- wamp的安装配置
WAMP是指在Windows服务器上使用Apache.MySQL和PHP的集成安装环境,可以快速安装配置Web服务器. 一.下载安装包 进入官网下载:http://www.wampserver.com ...
- C语言基础 (6) 类型转换,数组与随机数
复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...
- BZOJ 2161 布娃娃 (主席树)
题面 想了一个主席树做法 我们把每个区间的两个端点拆开 对$L,R$分别从小到大排序,分别从左到右依次把对应标号的$c_{i}$插入到权值主席树里 每次查询$p_{i}$,在排序后的$L,R$数组上分 ...