“十进制小数转 IEEE 754 单精度浮点数”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“https://m.toutiao.com/is/6L1e1xe/”的新页面)
 
第1行: 第1行:
 
https://m.toutiao.com/is/6L1e1xe/
 
https://m.toutiao.com/is/6L1e1xe/
 +
 +
例如: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)
 +
 +
即:(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="24" |23位 尾数(省略了最高位的1)
 +
|-
 +
!全局序列
 +
!0
 +
!
 +
!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
 +
|-
 +
!局部序列
 +
!0
 +
!
 +
!0
 +
!1
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!
 +
!0
 +
!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
 +
|0
 +
|-
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|}

2022年9月6日 (二) 08:16的版本

https://m.toutiao.com/is/6L1e1xe/

例如: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)10的二进制是(10110010)2


小数部分:

0.125*2=0.25…取整数部分0

0.25*2=0.5…取整数部分0

0.5*2=1…取整数部分1

顺序排列,所以(0.125)10=(0.001)2


合起来即是:10110010.001

2、转换成计算机存储形式的二进制浮点数

把小数点移动到整数位只有1,即为:1.011 0010 001 * 2111,基数2的指数111是二进制,换算成十进制为7,因为小数点左移了7位,所以是111。

3、阶码(指数)

阶码(指数)的计算公式:

阶数(指数)+偏移量(单精度浮点数指数偏移值是127)

即:(111)2 + (01111111)2=(1000 0110)2,也就是(7)10+(127)10=(134)10

4、尾数

小数点后面的数,即 011 0010 001

小数点前面的1去哪里了?由于尾数部分是规格化表示的,最高位总是1,所以省略不存。这样尾数部分就可以多存1位、提高精度。

5、符号位

由于 178.125 是正数,故为0(负数为1)

6、结果

最终结果为

(178.125)10 IEEE 754 单精度浮点数的二进制存储
1位 符号位 8位 阶码(指数) 23位 尾数(省略了最高位的1)
全局序列 0 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
局部序列 0 0 1 2 3 4 5 6 7 0 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 0