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 ...
随机推荐
- javascript 公历与农历相互转换工具类
/** * 公历[1900-1-31,2100-12-31]时间区间内的公历.农历互转 * @charset UTF-8 * @Author Jea杨(JJonline@JJonline.Cn) * ...
- Android CollapsingToolbarLayout Toolbar的title覆盖问题
CollapsingToolbarLayout 里: app:titleEnabled="true" app:title="Hello" Toolbar 里: ...
- CDR中是否有图层,如何调出图层面板?
什么是图层?如果有点PS基础的同学,应该会非常清楚这个概念,它是构成图像的重要组成单位,许多效果可以通过对层的直接操作而得到,并在当前图层操作时候不会影响到其他图层,所以在绘图的过程中有着很重要的作用 ...
- vue 项目初始化、mock数据以及安装less
vue 创建一个项目 1.首先建立一个空文件夹,然后将这个文件夹要放到码云或者其他代码管理平台. 例如码云: 在码云上建立一个项目,然后在控制台进入这文件夹执行 git clone 地址是码云上创建的 ...
- SQL SEVER 递归查询
with ts as ( --首先要查询出最原始父级的信息 union all --全连接 select a.fitemclassid,a.fitemid, a.fnumber,a.Fparentid ...
- kernel对NTP的API,系统调用函数
kenrel API for NTP kernel 提供两个API(即系统调用 system call)给应用程序NTP,去校准kernel system clock Kernel Applicati ...
- 【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装
// 属性框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 获取/设置某一个元素 ...
- Django入门--模板路径配置及渲染
模板就是前端的页面,Django把html源码写到模板文件中,然后通过特定方法渲染后交给客户端. 模板路径设置方法有两种,分别是在项目目录下设置以及在应用目录下设置. 模板查找顺序:优先在DIRS设置 ...
- 面试准备专题——JVM,类编译,类加载,内存错误
jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 类的加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法 ...
- 2016年工作中遇到的问题1-10:select-for-update锁表
1.select... for update锁表.注意事项:事务下使用,@Transactional如果用主键,只锁住1行记录如果不用主键,会锁住多条记录,mysql下测试,查询1条,锁住1行,查询2 ...