浮点型数据解析

本文详细介绍了浮点型数据Double和Float在计算机中的存储形式,遵循IEEE754标准,包括符号位、指数位和数据位。通过具体例子解释了如何将Double类型数据转换成8个字节的byte型数据,并提供了转化算法。同时,提到了Float类型的转化原理,其精度比Double低,但转化逻辑相同。
摘要由CSDN通过智能技术生成

Double类型理解和转化

1. 概述

​ 因项目需求。需要对double型数据做串口传输,因此如何把double型数据转为8个字节的byte型数据,就尤为关键了。按照一般的行为思考,为了保证精度,可以对8字节的数据做整形转换在除以10^n,以此来确定具体的精度。但这显然对于计算机而言加大了运算量。
​ 故,详细的了解double类型在计算机中的存储已经是非常的必要了。
​ Double类型遵循IEEE754标准
IEEE754标准

2. double型详解

S EEEE EEEE EEE DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD

S ----- 符号位:0为正数,1为负数
EEEE EEEE EEE ------ 指数位:数据位的小数点偏移数,因存在正负数的问题,因此2^10-1为0指数的值
DDD{n=52} ------ 数据位:默认为二进制数据,且数据位默认缺省第一个1值,因此转化时需要补位

例如:
123.45 =》bin(123.45)=bin(123)+bin(0.45)
bin(123)转二进制则除二取余,得0b111 1011
bin(0.45)转二进制则乘二区整,得0b0111001100110011001100110011001100110011001100
则整体有:bin(123.45) = 0b 111 1011. 0111001100110011001100110011001100110011001100共计53位
指数偏移为:+6 (变为:0b 1.11 1011 0111 0011 0011 0011…) = 1023+6=1029
符号位为:0
整合后有:
0 1000 0000 101 1110 1101 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100(需进位)
转为十六进制为: hex = 0x 40 5E DC CC CC CC CC CD

3. 代码实现

​ 代码实现分为两种,一种为根据如上的转化算法做转化,另一种根据union共用体的方式实现。
方法一:转化值double d为8个字节数据。

  1. 取符号位,d>0为0,<0为1
  2. d的整数部分和小数部分分别转化为二进制数值
  3. 算出指数位
  4. 整合排序1+11+52的数据逻辑
  5. 8位整理分段

方法二:转化值double d为8个字节的数据

typedef union{
   
	double d64;
	u8 v[9];
}_Double64;
_Double64 dx;
dx.d64 = d
# 此时8个字节的数据分别为v[0]---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值