今天用微软自带的计算器计算浮点的十六进制码,竟然没有,然后我就查啊查,费了九牛二虎之力才搞懂这个。

float是32位,符号位(正负),小数点位,小数后的位数是这样分配的。

首先,计算机的内数字在内存中是逆序存放的。即1234,实际存放是4321。内存怎么样存放我是不清楚的,只能在硬盘中查看数据。尽管硬盘数据有大端字节序和小端字节序区分,但中文操作系统好像默认都是逆序的小端字节序(little-endian)。

大端字节序

小端字节序

32位整数在硬盘里的存放顺序,以每8位为一个数字,即每个数都以十六进制来表示,倒着放到硬盘里,类似于8位堆栈。例如整数3,347,750,752,用十六进制表示正常顺序是C7 8A 9F 60,存放在硬盘里就是60 9F 8A C7。

这个顺序是非常重要的,我做音乐播放器几乎天天在查PCM码,每天都要算来算去的。倒序码再熟悉不过了。

但是想研究浮点型,还需要将十六进制转换为二进制。因为浮点的位有特定的用处。

32位浮点型数字,第32位是符号位,紧跟着的8位,即23-31位是指数位,剩下的23位是尾数位。

符号位好理解,即正负位。至于什么是指数位,什么是尾数位,简单说就是:2^(指数位-127)*尾数位 。我们以+0.8,-0.8为例

先看这两个数的十六进制代码:

上图为正,下图为负。

同样是上正下负。倒序输入计算器后得到二进制数值。

0.8的十六进制:3F4C CCCD

0.8的二进制:0011 1111 0100 1100 1100 1100 1100 1101

正数符号位为0,负数符号位为零

记住,这是倒序的,也就是,从左数第一位是32位,即符号位。 这是最简单,最易理解的。

紧接着的指数位部分011 1111 0,指数位代表什么呢?10进制来说,指数位就是代表了这个数字的位数,十百千万,10^n次位那种,二进制同理。8位可以最多表示256个数,也就是2^256次方,但是因为指数可以有负数的,比如小于1的小数,全是负数。2的0次幂是1,在没有符号位的情况下,我们折中以127为分界限,低于127代表负数,高于127则为正数。即大于1的数。听起来麻烦,实例来看下。

比如1.0000的二进制代码是0011 1111 1000 0000 0000 0000 0000 0000,红字部分是指数位。

即0111 1111,也就是127。指数就是0。2^0=1。1.00000,尾数部分为零

比如0.5000的二进制代码是0011 1111 0000 0000 0000 0000 0000 0000

0.5的指数位是0111 1110,也就是126,127-1,即-1。2^(-1)=0.5,尾数部分为0。

再看下0.25的二进制代码0011 1110 1000 0000 0000 0000 0000 0000

0.25的指数位为0111 1101,值为125,127-2。2^(-2)。

再看下二制无法整除的数字0.3333的二进制码:0011 1110 1010 1010 1010 0110 0100 1100

0111 1101,也是125,即-2次幂。指数提供了0.25这个基础位数,相当于十进制的19,210,304的10,200,300,尾数部分则用来表示9,10,04。0.33的二进制指数位提供了0.25这个部分,即2^(-2),剩下的0.0833则由尾数提供

具体是这样算的:

比如0.4的二进制是0011 1110 1100 1100 1100 1100 1100 1101(尾数)

指数位去掉127为-2,即2(-2)=0.25,0.25的二进制手工表示为0.01,很多教程都不把指数位算进去,最后得出的结果就很坑逼,那是不对的,实际上是这样的,指数位再换算成二进制后得加到后面的尾数位里,即加上尾数位前面,0.4就是0.25+尾数=0.01接上尾数位,0.01100 1100 1100 1100 1100 1101,在内存和硬盘里自然不会有前面的零和点,即0110 0110 0110 0110 0110

因为看了错误的教程,我走了很多弯路才搞清楚,每比较一个浮点数的二进制和十六进制码都需要思考为什么这样,浪费了好多时间。我把这个写这么细,就是希望不要再有人无谓的浪费时间了。

float数据十六进制表示法,十六进制读取float数据相关推荐

  1. R语言可以直接从数据库读取数据么?R语言读取数据库数据示例

    R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 目录 R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 R语言是解决什么问题的? R语言可以直接从数据库读取数据么?R语言读取数据 ...

  2. python处理表格数据-python通过xrld库读取表格数据

    xrld库:是用来读取EXCEL表格 [功能实现]:通过学生名字和科目查找对应的成绩 快速安装工具包 #xlrd库:读取excel数据的库 import xlrd #操作的表格路径 file_path ...

  3. 使用python将txt格式的数据转换为csv格式,读取csv数据前几行

    首先从文本文件和Excel文件中读入数据,形成dataframe,然后可以将dataframe导出到文本文件.Excel文件中存储起来. 使用如下的python语句: import numpy as ...

  4. python获取mysql中的数据供js调用_python 读取mysql数据至csv文件中,并发送邮件

    test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...

  5. 罗技F710手柄描述符数据抓包 - 以及stm32读取usb-hid数据程序

    硬件: 罗技F710游戏手柄.一台笔记本电脑 软件: USBlyzer分析仪(下载地址) 大家都知道,罗技F710上有D模式和X模式,D模式是普通模式,每帧数据传输8个字节:X模式是xbox手柄模式, ...

  6. mysql的数据是存到本地_读取股票数据存储到本地MySQL数据库(二)

    通过凤凰api获取到json数据. #encoding = utf-8 import requests import json import pandas as pd class GetStockPr ...

  7. php ajax post请求数据变形,php-在AJAX调用中读取POST数据

    我有一些通过Ajax调用不断更改的Session值.我似乎无法获得POST数据的句柄来处理它并设置值. 我要传递给它的是一个字符串数组,如下面的代码所示. 这是AJAX调用的位置: var sessi ...

  8. python 从同花顺获取数据导出,通达信PYTHON读取本地数据,如何使用python在文件中读取数据?...

    Q1:如何使用python在文件中读取数据? file = open('a','r').readlines()[1] Q2:python怎么将本地一个文件夹的所有文本读进内存中 列出文件,把各个文件打 ...

  9. java接收二进制数据_java-从套接字读取二进制数据

    我正在尝试连接到服务器,然后向其发送HTTP请求(在这种情况下为GET).这个想法是请求一个文件,然后从服务器接收它. 它应同时适用于文本文件和二进制文件(例如imgs).我对文本文件没有任何问题,它 ...

  10. 用python读取excel数据、并作图_python读取excel数据并制图

    #读excel数据#打开文件数据= _workbook (' E: \\桌面\\ ')表= _by_index(0) #得到总行数nrows = #得到的总数列ncols = #得到一个列的值,比如第 ...

最新文章

  1. 通信中dBFS、dBm、dBV、dBW、0dB、-3dB的定义
  2. 机器学习之SVM原理与案例
  3. Day 31 并发编程
  4. 2017-9-17pat甲级 B
  5. 在Windows平台上安装Node.js及NPM模块管理
  6. python3 快速排序
  7. Confluence 6 选择一个外部数据库
  8. @autowired注解注入为null_Java面试必备:依赖注入注解@Resource和@Autowired
  9. php 内链接实现三表,Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
  10. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
  11. [工具][转载] ExtractData 1.08更新
  12. 《金字塔原理》学习笔记 | 第1篇—表达的逻辑
  13. [推荐]15款非常好用的新浪,腾讯短链接生成器,一次生成永不失效,巨好用!
  14. 内核 BUG_ON 以及WARN_ON 用法作用
  15. Linux centos7 代码运行时出现已放弃(吐核)的问题解决
  16. 实例三十六:精确除法计算(*)
  17. 嵌入式开发日记(9)——多线程与socket通信
  18. 从CSDN到GitChat
  19. android 5.0关闭加密,谷歌放宽Android 5.0系统全盘加密限制
  20. 自动驾驶技术之——被低估的传感器超声波雷达

热门文章

  1. 单片机位寻址举例_51单片机直接寻址方式与编程举例
  2. arm模拟器手机版_基于ARM的模拟器
  3. python画实心圆_任意空实心圆形打印|Python练习系列[8]
  4. 图片优化——质量与性能的博弈
  5. iOS 音乐播放器(二)
  6. android .dex文件,对于Android DEX文件详细说明
  7. java虚拟键盘_如何用Java为其他程序制作虚拟键盘?
  8. 关于领域驱动设计(DDD)中聚合设计的一些思考
  9. html五角星符号怎么打,实心五角星怎么打出来(半实心星星符号连续)
  10. 投票男神女神公众号投票系统_男神女神投票 v5.5.21版本