一.原理
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值在不同系统内存中的数值转换工具相关推荐

  1. LINUX系统程序设计中C/C++编程工具使用

    LINUX系统程序设计中C/C++编程工具使用 一.实验目的 掌握gcc编译器的使用 掌握gdb调试器的使用 掌握make工程管理器的使用 理解Makefile文件的格式,掌握Makefile文件的编 ...

  2. Android进程守护,让APP在系统内存中常驻(二)

    昨天晚上写了用系统服务等方法来实现应用保活.今天写一下用提高app的进程等级来实现应用保活.想看直接调用系统方法保活应用的可以点击Android进程守护,让APP在系统内存中常驻(一)进行跳转. 一: ...

  3. 目标检测中的数据格式转换工具Roboflow

    目标检测中的数据格式转换工具.Roboflow Roboflow提供了您需要的所有工具,将原始图像转换为定制的训练有素的计算机视觉模型,并部署它在您的应用程序中使用. Roboflow支持检测目标和分 ...

  4. c语言double数据存储形式,C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...

  5. C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-255(表示0~255一共25 ...

  6. 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...

    小数在内存中是以浮点数的形式存储的.浮点数并不是一种数值分类,它和整数.小数.实数等不是一个层面的概念.浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的.C语言使用定点数格式来存储 ...

  7. double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的

    java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float ...

  8. 利用开源工具搭一套汉英翻译系统(一):预处理工具

    语料获取不在赘述,可以去LDC上申请,也可以找找别人放出的免费资源.语料编码默认都是UTF8. 在这里,我们使用FBIS语料,规模在24万句对左右.英语和汉语是两个文件,行对应,行数相同,train. ...

  9. 微信开发者工具命令行_在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折.注:带 * 的步骤或文件为不确定是否管用的步骤或文件. 本人系统为Linux ...

最新文章

  1. danfoss 变频器的profinet通讯调试_840D sl系统PLC 开机调试
  2. 像我这种背景的人跑到微软来干什么?
  3. 动态CSS - LESS学习总结
  4. mysql数据库优化大全_MySQL数据库优化技巧大全
  5. C# WinfForm 控件之dev报表 XtraReport (六) 图表Charts 无内容
  6. Spring AOP底层实现原理
  7. 01 ftp上传简单示例服务端
  8. there are so many javascript library
  9. k8s核心技术-Pod(调度策略)_影响Pod调度(节点亲和性)---K8S_Google工作笔记0026
  10. Jordan Lecture Note-9: Principal Components Analysis (PCA).
  11. iOS 原生导航栏 修改导航栏文字颜色 大小
  12. shell脚本启动语法错误syntax error near unexpected token '{
  13. 国内外3D视觉优秀的实验室或者团队汇总
  14. JQuery左右切换实现
  15. Oracle 11g安装步骤(超详细)
  16. Dota2 荒神罪 破解
  17. 深入了解Elasticsearch存储
  18. 论文笔记:SemStyle: Learning to Generate Stylised Image Captions using Unaligned Text
  19. 访客模式 无痕模式 区别_模式:访客模式
  20. macbook12寸开发java_我买的MacBook 12寸的。我就是嘚瑟一下。

热门文章

  1. Patran学习问题笔记
  2. 使用Unity 5和JavaScript创建WebGL游戏
  3. oracle触发器if多条件,oracle触发器使用总结
  4. Rocke Group团伙新挖矿变种AliyunMiner分析
  5. 阿古斯机器人_炉石传说:圣盾巨龙后期无敌?三种快速转型打法助你稳抓圣盾流...
  6. 【问链财经-区块链基础知识系列】 第三十五课 区块链跨境贸易完全简析
  7. 一个转身,也许就已经一辈子错过。梁静茹结婚玛莎未获邀请。刘烨在婚礼前,把自己关起来哭了好长时间。
  8. 世界上用户最多的两大星球丨腾讯赚钱花钱!脸谱道歉道歉!
  9. kubernetes修改节点名称(转)
  10. java多线程复习与巩固(五)