【工具篇】float值在不同系统内存中的数值转换工具
一.原理
float在内存中如何存储?
float为浮点型,32位机器中占4字节共32bit,下标0~31.
31 位:符号位,正数为0,负数为1。
30 位:方向位。小数点左移位1,右移为0。
23~29:共7位,指数位。=指数-1。
0~22:共23位,尾数。
转换方法:
1 整数部分转成二进制。整数不停的除2,直到商位0。逆序取出每次的余数。===>>>>就是得到整数部分的2进制表示
2 小数部分转成二进制。小数部分不停的乘2,直到结果的小数部分位0.正序取出每次的商。
3 第一步和第二步得到数据拼接。第一步得到的结果在小数点左边,第二步得到的在小数点右边。转为科学计数法。
4 拼接。按照上面的bit说明填充。尾数不够,右边补0.
举例:写出8.25 12.5 0.25 都是如何在内存中保存。
8.25的存储计算方法:
整数部分8转成二进制:
8/2=4 余 0
4/2=2 余0
2/2=1 余0
1/2=0 余1 商位0 那么停止。 得到逆序 1000
其实就是8的二进制表现形式么 1000
2、小数部分0.25转为二进制:
0.25*2=0.5 整数部分 0
0.5*2=1.0 整数部分 1 此时小数部分为0 停止。得到正序 01
3、用2进制:
1000.01 = 1.00001 * 2的3次方。小数点左移了3位。
4、
31位正数:0
30位小数点左移: 1
指数位:3-1=2=0000010
尾数:0000 1000 0000 0000 0000 000
最终:0100 0001 0000 0100 0000 0000 0000 0000=0x41040000
以上可以看出 如果是-8.25 只需要最高位变为1即可。最终:1100 0001 0000 0100 0000 0000 0000 0000 = 0xC1040000
12.5的转换过程:
1 整数部分:
12/2 = 6 余 0
6/2=3 余 0
3/2=1 余1
1/2=0 余1
得到余数逆序 1100
2 小数部分:
0.5*2=1.0 整数为1
得到 1
3: 得到二进制:1100.1=1.1001*2的3次方
4: 0 1 0000010 1001 0000000000000000000 = 0x41480000
0.25转化过程
1 整数部分转换为 0
2 小数部分0.25
0.25*2=0.5 整数部分0
0.5*2=1.0 整数部分1
3 得到0.01 = 1.0*2的-2次方
4 得到:0 0 1111101 0000000000000000000000=0x3E800000 指数部分 -2-1=-3=FD=11111101 拿走7位
二.工具实现
基于qt实现:
1.大小端选择(判断)
bool IsBigEndian()
{bool iRet = false;int tmp = 1;unsigned char *p = reinterpret_cast<unsigned char *>(&tmp);if(1 == *p)iRet = false;elseiRet = true;return iRet;
}
PS:输入12.5 小端
输入12.5 大端
2.输入待转换数值
3.点击转换,查看转换值
三.工具源码地址
可执行应用包下载地址:
https://download.csdn.net/download/weixin_43246024/77675753
gitee源码地址:
https://gitee.com/gardenzyc/my-embedded-tools/tree/master/
【工具篇】float值在不同系统内存中的数值转换工具相关推荐
- LINUX系统程序设计中C/C++编程工具使用
LINUX系统程序设计中C/C++编程工具使用 一.实验目的 掌握gcc编译器的使用 掌握gdb调试器的使用 掌握make工程管理器的使用 理解Makefile文件的格式,掌握Makefile文件的编 ...
- Android进程守护,让APP在系统内存中常驻(二)
昨天晚上写了用系统服务等方法来实现应用保活.今天写一下用提高app的进程等级来实现应用保活.想看直接调用系统方法保活应用的可以点击Android进程守护,让APP在系统内存中常驻(一)进行跳转. 一: ...
- 目标检测中的数据格式转换工具Roboflow
目标检测中的数据格式转换工具.Roboflow Roboflow提供了您需要的所有工具,将原始图像转换为定制的训练有素的计算机视觉模型,并部署它在您的应用程序中使用. Roboflow支持检测目标和分 ...
- c语言double数据存储形式,C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...
- C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-255(表示0~255一共25 ...
- 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...
小数在内存中是以浮点数的形式存储的.浮点数并不是一种数值分类,它和整数.小数.实数等不是一个层面的概念.浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的.C语言使用定点数格式来存储 ...
- double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的
java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float ...
- 利用开源工具搭一套汉英翻译系统(一):预处理工具
语料获取不在赘述,可以去LDC上申请,也可以找找别人放出的免费资源.语料编码默认都是UTF8. 在这里,我们使用FBIS语料,规模在24万句对左右.英语和汉语是两个文件,行对应,行数相同,train. ...
- 微信开发者工具命令行_在Linux系统下运行微信Web开发者工具
微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折.注:带 * 的步骤或文件为不确定是否管用的步骤或文件. 本人系统为Linux ...
最新文章
- danfoss 变频器的profinet通讯调试_840D sl系统PLC 开机调试
- 像我这种背景的人跑到微软来干什么?
- 动态CSS - LESS学习总结
- mysql数据库优化大全_MySQL数据库优化技巧大全
- C# WinfForm 控件之dev报表 XtraReport (六) 图表Charts 无内容
- Spring AOP底层实现原理
- 01 ftp上传简单示例服务端
- there are so many javascript library
- k8s核心技术-Pod(调度策略)_影响Pod调度(节点亲和性)---K8S_Google工作笔记0026
- Jordan Lecture Note-9: Principal Components Analysis (PCA).
- iOS 原生导航栏 修改导航栏文字颜色 大小
- shell脚本启动语法错误syntax error near unexpected token '{
- 国内外3D视觉优秀的实验室或者团队汇总
- JQuery左右切换实现
- Oracle 11g安装步骤(超详细)
- Dota2 荒神罪 破解
- 深入了解Elasticsearch存储
- 论文笔记:SemStyle: Learning to Generate Stylised Image Captions using Unaligned Text
- 访客模式 无痕模式 区别_模式:访客模式
- macbook12寸开发java_我买的MacBook 12寸的。我就是嘚瑟一下。
热门文章
- Patran学习问题笔记
- 使用Unity 5和JavaScript创建WebGL游戏
- oracle触发器if多条件,oracle触发器使用总结
- Rocke Group团伙新挖矿变种AliyunMiner分析
- 阿古斯机器人_炉石传说:圣盾巨龙后期无敌?三种快速转型打法助你稳抓圣盾流...
- 【问链财经-区块链基础知识系列】 第三十五课 区块链跨境贸易完全简析
- 一个转身,也许就已经一辈子错过。梁静茹结婚玛莎未获邀请。刘烨在婚礼前,把自己关起来哭了好长时间。
- 世界上用户最多的两大星球丨腾讯赚钱花钱!脸谱道歉道歉!
- kubernetes修改节点名称(转)
- java多线程复习与巩固(五)