float数据十六进制表示法,十六进制读取float数据
今天用微软自带的计算器计算浮点的十六进制码,竟然没有,然后我就查啊查,费了九牛二虎之力才搞懂这个。
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数据相关推荐
- R语言可以直接从数据库读取数据么?R语言读取数据库数据示例
R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 目录 R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 R语言是解决什么问题的? R语言可以直接从数据库读取数据么?R语言读取数据 ...
- python处理表格数据-python通过xrld库读取表格数据
xrld库:是用来读取EXCEL表格 [功能实现]:通过学生名字和科目查找对应的成绩 快速安装工具包 #xlrd库:读取excel数据的库 import xlrd #操作的表格路径 file_path ...
- 使用python将txt格式的数据转换为csv格式,读取csv数据前几行
首先从文本文件和Excel文件中读入数据,形成dataframe,然后可以将dataframe导出到文本文件.Excel文件中存储起来. 使用如下的python语句: import numpy as ...
- python获取mysql中的数据供js调用_python 读取mysql数据至csv文件中,并发送邮件
test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...
- 罗技F710手柄描述符数据抓包 - 以及stm32读取usb-hid数据程序
硬件: 罗技F710游戏手柄.一台笔记本电脑 软件: USBlyzer分析仪(下载地址) 大家都知道,罗技F710上有D模式和X模式,D模式是普通模式,每帧数据传输8个字节:X模式是xbox手柄模式, ...
- mysql的数据是存到本地_读取股票数据存储到本地MySQL数据库(二)
通过凤凰api获取到json数据. #encoding = utf-8 import requests import json import pandas as pd class GetStockPr ...
- php ajax post请求数据变形,php-在AJAX调用中读取POST数据
我有一些通过Ajax调用不断更改的Session值.我似乎无法获得POST数据的句柄来处理它并设置值. 我要传递给它的是一个字符串数组,如下面的代码所示. 这是AJAX调用的位置: var sessi ...
- python 从同花顺获取数据导出,通达信PYTHON读取本地数据,如何使用python在文件中读取数据?...
Q1:如何使用python在文件中读取数据? file = open('a','r').readlines()[1] Q2:python怎么将本地一个文件夹的所有文本读进内存中 列出文件,把各个文件打 ...
- java接收二进制数据_java-从套接字读取二进制数据
我正在尝试连接到服务器,然后向其发送HTTP请求(在这种情况下为GET).这个想法是请求一个文件,然后从服务器接收它. 它应同时适用于文本文件和二进制文件(例如imgs).我对文本文件没有任何问题,它 ...
- 用python读取excel数据、并作图_python读取excel数据并制图
#读excel数据#打开文件数据= _workbook (' E: \\桌面\\ ')表= _by_index(0) #得到总行数nrows = #得到的总数列ncols = #得到一个列的值,比如第 ...
最新文章
- 通信中dBFS、dBm、dBV、dBW、0dB、-3dB的定义
- 机器学习之SVM原理与案例
- Day 31 并发编程
- 2017-9-17pat甲级 B
- 在Windows平台上安装Node.js及NPM模块管理
- python3 快速排序
- Confluence 6 选择一个外部数据库
- @autowired注解注入为null_Java面试必备:依赖注入注解@Resource和@Autowired
- php 内链接实现三表,Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- [工具][转载] ExtractData 1.08更新
- 《金字塔原理》学习笔记 | 第1篇—表达的逻辑
- [推荐]15款非常好用的新浪,腾讯短链接生成器,一次生成永不失效,巨好用!
- 内核 BUG_ON 以及WARN_ON 用法作用
- Linux centos7 代码运行时出现已放弃(吐核)的问题解决
- 实例三十六:精确除法计算(*)
- 嵌入式开发日记(9)——多线程与socket通信
- 从CSDN到GitChat
- android 5.0关闭加密,谷歌放宽Android 5.0系统全盘加密限制
- 自动驾驶技术之——被低估的传感器超声波雷达
热门文章
- 单片机位寻址举例_51单片机直接寻址方式与编程举例
- arm模拟器手机版_基于ARM的模拟器
- python画实心圆_任意空实心圆形打印|Python练习系列[8]
- 图片优化——质量与性能的博弈
- iOS 音乐播放器(二)
- android .dex文件,对于Android DEX文件详细说明
- java虚拟键盘_如何用Java为其他程序制作虚拟键盘?
- 关于领域驱动设计(DDD)中聚合设计的一些思考
- html五角星符号怎么打,实心五角星怎么打出来(半实心星星符号连续)
- 投票男神女神公众号投票系统_男神女神投票 v5.5.21版本