“十进制小数转 IEEE 754 单精度浮点数”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“https://m.toutiao.com/is/6L1e1xe/”的新页面) |
Jihongchang(讨论 | 贡献) |
||
第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、结果
最终结果为
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 | ||