查看“十进制小数转 IEEE 754 单精度浮点数”的源代码
←
十进制小数转 IEEE 754 单精度浮点数
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
https://m.toutiao.com/is/6L1e1xe/ https://www.youtube.com/watch?v=8afbTaA-gOQ 例如:178.125 === 1、分别把浮点数的整数部分和小数部分转换成2进制 === 整数部分: 178/2=89…0 89/2=44…余1 44/2=22…余0 22/2=11…余0 11/2=5…余1 5/2=2…余1 2/2=1…余0 1/2=0…余1 逆序排列,所以(178)<sub>10</sub>的二进制是(10110010)<sub>2</sub> 小数部分: 0.125*2=0.25…取整数部分0 0.25*2=0.5…取整数部分0 0.5*2=1…取整数部分1 顺序排列,所以(0.125)<sub>10</sub>=(0.001)<sub>2</sub> 合起来即是:10110010.001 === 2、转换成计算机存储形式的二进制浮点数 === 把小数点移动到整数位只有1,即为:1.011 0010 001 * 2<sup>111</sup>,基数2的指数111是二进制,换算成十进制为7,因为小数点左移了7位,所以是111。 === 3、阶码(指数) === 阶码(指数)的计算公式: 阶数(指数)+偏移量(单精度浮点数指数偏移值是127) 其中偏置值的计算是:2<sup>e</sup>-1,比如单精度浮点数的阶码占8位,要作为一个无符号整数存储阶码的话,就是2<sup>8</sup>-1=127; 以 01111111 作为指数 0;阶码大于 01111111 指数为正;阶码小于 01111111 指数为负。 即:(111)<sub>2</sub> + (01111111)<sub>2</sub>=(1000 0110)<sub>2,</sub>也就是(7)<sub>10</sub>+(127)<sub>10</sub>=(134)<sub>10</sub> === 4、尾数 === 小数点后面的数,即 011 0010 001 小数点前面的1去哪里了?由于尾数部分是规格化表示的,最高位总是1,所以省略不存。这样尾数部分就可以多存1位、提高精度。 === 5、符号位 === 由于 178.125 是正数,故为0(负数为1) === 6、结果 === 最终结果为 {| class="wikitable" |+(178.125)<sub>10</sub> IEEE 754 单精度浮点数的二进制存储 ! !1位 符号位 ! ! colspan="8" |8位 阶码(指数) ! ! colspan="23" |23位 尾数(省略了最高位二进制整数部分的1)2^23=8388608 |- !全局序列 !1 ! !2 !3 !4 !5 !6 !7 !8 !9 ! !10 !11 !12 !13 !14 !15 !16 !17 !18 !19 !20 !21 !22 !23 !24 !25 !26 !27 !28 !29 !30 !31 !32 |- !局部序列 !1 ! !1 !2 !3 !4 !5 !6 !7 !8 ! !1 !2 !3 !4 !5 !6 !7 !8 !9 !10 !11 !12 !13 !14 !15 !16 !17 !18 !19 !20 !21 !22 !23 |- |二进制值 |0 | |1 |0 |0 |0 |0 |1 |1 |0 | |0 |1 |1 |0 |0 |1 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |} 单精度浮点数为32位,不够32位后面补0。 '''<big>注意:</big>''' 其中尾数部分23位 (8388608)<sub>10,</sub> 也就是说存储的十进制数的小数点后面最大就是 8388608,7位小数,不够的换成 双精度 double,尾数52位,可以存储 (4503599627370496)<sub>10</sub>,15、16位小数 === 7、验证 === https://www.bilibili.com/video/BV1F741137za<syntaxhighlight lang="java"> public class Test { public static void main(String[] args) { //符号位_阶码_尾数码 int i = 0b0_10000110_01100100010000000000000; System.out.println(Float.intBitsToFloat(i)); //output: 178.125 } } </syntaxhighlight>
返回至
十进制小数转 IEEE 754 单精度浮点数
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息