浮点数用十六进制表示方式附C代码

2023-05-16

浮点数用十六进制表示;我这里遇到的问题是知道数值,但需要把数值发送到上位机里显示波形,但是上位机是以浮点数的存储格式来解析的,但是我的单片机不支持float类型,所以我的需求是把已知的数值看做是浮点数,然后把该数值以浮点数的存储方式存储到另外的一个变量,所以我的代码是把已知的数值用浮点数的存储方式表示出来,或者说是计算已知数值的浮点数值

举例:已知一个数为12,他的浮点数表示为 41400000h,我的目的就是把通过12计算出41400000h。

先说明下浮点数的存储原理,是网上别人写的,找不到连接了,把他说的先放前面

 

在二进制文件中,存储数据的格式为16进制,

下面举例说明27.0f在二进制文件中怎么表示。

float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
每8位分为一组,分成4组,分别是A组、B组、C组、D组。
每一组是一个字节,在内存中逆序存储,即:DCBA

27.0表示成二进制为:11011.0

用科学计数法表示为1.10110*2^4,现在我们要的尾数和指数都出来了。

尾数为:1101 10 (删除前面的第一个1,因为用科学计数法表示,二进制中第一个永远都为1,计算机在存储的时候就没有存储这个1,只存储小数点后面的位数)   不足23位,补0,就是1011 0000 0000 0000 0000 000(23位)

指数:为4 。一共8位,可以表示范围是0 ~ 255的无符号整数,也可以表示-128~127的有符号整数。但因为指数是可以为负的,所以为了统一把十进制的整数化为二进制时,都先加上127。

所以:4+127=131  变成二进制就是10000011

27.0用二进制表示就是:

加上第31位的符号位0

就是0100 0001 1101 1000 0000 0000 0000 0000

十六进制就是:41 D8 00 00

 

再看一个数27.5,二进制为11011.1

1.10111*2^4

尾数(小数点后的数)10111,补够23位 1011 1000 0000 00000000 000

指数:4,加上127,就是131,二进制1000 0011

用二进制表示就是 (符号数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 00000000 000

写成二进制标准形式:0100 00011101 1100 0000 0000 0000 0000

写成16进制就是41 DC 00 00

uint32_t data2hex(uint16_t data)  
{
	uint32_t temp;  
	uint8_t i=0;  
  
	temp = data;//转存需要计算的数值  
	while(temp)  
	{         
		temp >>= 1;  
		i++;//计算当前值的尾数占有的位数  
	}  
	i--;//计算下来,i会多加一次,这儿减掉  
	temp = data;  //再次赋值,准备合并
	temp = temp<<(23-i);//补足23位尾数  
	temp = (i+127)<<23 | temp;//计算指数,并与尾数合并起来   
	temp = temp & ~(1<<23);//确定正负  我这儿都是正数,就没管负数了  
	
	return temp;//这里就已经是以浮点数的存储方式表示的传进来的参数了
}

转载于:https://my.oschina.net/youmeichifan/blog/2054813

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点数用十六进制表示方式附C代码 的相关文章

  • go module go.mod

    这一次 xff0c 彻底掌握go mod 1 版本号规范 go mod 对版本号的定义是有一定要求的 xff0c 它要求的格式为 v lt major gt lt minor gt lt patch gt xff0c 如果 major 版本
  • protobuf数据类型

    四 限定符 required optional repeated 的基本规则 1 在每个消息中必须至少留有一个required类型的字段 2 每个消息中可以包含0个或多个optional类型的字段 3 repeated表示的字段可以包含0个
  • gdb如何保存和读取断点

    刚开始在linux下学编程使用gdb的同学可能会发现 xff0c 每次用gdb设置断点调试程序 xff0c 但下次打开的时候所有断点都没有了 xff0c 很不方便 下面介绍保存和读取断点的方法 1 保存断点 先用info b 查看一下目前设
  • C可变参数函数 实现

    C函数要在程序中用到以下这些宏 void va start va list arg ptr prev param type va arg va list arg ptr type void va end va list arg ptr va
  • 灰度发布系统的实现

    灰度发布 xff0c 已经不是一个很新的概念了 xff0e 一个产品 xff0c 如果需要快速迭代开发上线 xff0c 又要保证质量 xff0c 保证刚上线的系统 xff0c 一旦出现问题那么可以很快的控制影响面 xff0c 就需要设计一套
  • 软件汉化教程

    看到网上经常有人问汉化方面的东西 xff0c 我今天也来灌水一篇 xff0c 来个汉化扫盲教程 写的不好的地方欢迎大家指正 xff01 OK xff0c 现在我们进入正题 我这里所说的汉化 xff0c 是指汉化 Windows 下的 PE
  • Python操作mysql数据库(封装基本的增删改查)

    新学Python xff0c 在这里分享操作MySQL的全过程 1 安装MySQL python 1 2 3 win amd64 py2 7 exe xff0c 这是操作mysql数据库的python库 xff0c 有32位和64位之分 x
  • iOS内存管理

    1 内总管理原则 引用计数 IOS的对象都继承于NSObject 该对象有一个方法 retainCount xff0c 内存引用计数 引用计数在很多技术都用到 window下的COM组件 xff0c 多线程的信号量 xff0c 读写锁 xf
  • python 网络框架twisted基础学习及详细讲解

    twisted网络框架的三个基础模块 xff1a Protocol ProtocolFactory Transport 这三个模块是构成twisted服务器端与客户端程序的基本 Protocol xff1a Protocol对象实现协议内容
  • Python中struct.pack()和struct.unpack()用法详细说明

    python 中的struct主要是用来处理C结构数据的 xff0c 读入时先转换为Python的 字符串 类型 xff0c 然后再转换为Python的结构化类型 xff0c 比如元组 tuple 啥的 一般输入的渠道来源于文件或者网络的二
  • PWM脉宽调制 与PPM、SBUS、DSM2 协议 详细介绍

    原文地址 xff1a http www 5imx com portal php mod 61 view amp aid 61 1351 相信这个问题是每个模友在新入航模坑时都会遇到的问题 xff0c 也仍然在困扰着不少新手 这里简单对比解释
  • C/C++ 数学库文件 (math.h)

    转载 xff1a C C 43 43 数学库文件 math h C 标准库 lt math h gt C 标准库 lt math h gt 菜鸟教程 一 xff1a min xff0c max 函数使用 在math h 中没有这两个函数 c
  • extern “C"作用

    1 在cpp文件中调用c文件中实现的函数的时候 xff0c 需要用extern 34 C 34 声明该函数 xff0c 否则cpp会按名字改编后的 函数名去找该函数而找不到 这是作用 xff09 c文件中有一函数 xff1a void Tr
  • c语言char数组指针,C中char数组与char指针的区别是什么?

    冉冉说 C中char数组与char指针的区别是什么 xff1f C99 N 1256草稿字符串文字有两种不同的用法 xff1a 初始化char char c 61 34 abc 34 这是 更神奇的 xff0c 并在6 7 8 14 初始化
  • api身份验证_api上下文中的身份验证

    api身份验证 APIs are becoming a main interface for interacting with many things from enterprise services public services off
  • CORS手机测试软件,千寻cors账号的差分播发服务连接稳定性测试教程,测量员们赶紧进来看看哦...

    原标题 xff1a 千寻cors账号的差分播发服务连接稳定性测试教程 xff0c 测量员们赶紧进来看看哦 最近看到有很多人都在咨询千寻cors账号差分播放服务的相关问题 xff0c 那么今天cors账号网给大家收集整理了一个关于差分播发服务
  • linux 模拟socket请求,SOCKET模拟HTTP请求

    SOCKET模拟HTTP请求 HTTP请求头部样例 xff1a GET HTTP 1 1 Accept html text Host 220 181 6 175 80 Connection Close 这是一个请求百度页面的头部 属性和值的
  • linux 常用命令大全及其详解_Linux常用命令大全(最完整)

    欢迎大家一起学习交流 正在跳转 jq qq com 端口监听查看 xff1a ss tln 查看TCP的listen的端口 ss tlnp 查看哪些进程使用了监听端口 防火墙 systemctl status iptables 或servi
  • java 判断是否为整数_java判断是否为整数的几种方法

    方法一 xff1a 用JAVA自带的函数public static boolean isNumeric String str for int i 61 str length i gt 61 0 if Character isDigit st
  • c语言中6 2等于多少,概率中C62怎么算(6是下标,2标在上面)

    概率中C62怎么算 6是下标 xff0c 2标在上面 以下文字资料是由 历史新知网www lishixinzhi com 小编为大家搜集整理后发布的内容 xff0c 让我们赶快一起来看一下吧 xff01 概率中C62怎么算 6是下标 xff

随机推荐