浮点数用二进制表示方法
IEEE 754 浮点数计数标准
计算机中浮点数表示位如下形式(形式上与科学计数法 有些类似)其中M表示尾数,E表示阶码
![](https://ligo100.cn/wp-content/themes/CorePress/static/img/loading.gif)
完整的浮点数表示还包含符号位S,直观上说:
- 符号(S):1位二进制位,0表示正数,1表示负数
- 阶码部分(E):根据不同的精度E的位数不同(参照下图float与double的区别),表示小数点向右移动的位数。E>0 表示向右移动,E<0表示向左移动。
- 尾数部分(M):根据不同的精度M的位数不同参照下图float与double的区别),是浮点数的二进制表示。需要注意的是这里尾数部分为1.M....
,所以遇到类似0.125这样的小数,其二进制表示为0.1001111...
,这时就需要将小数点右移1位才符合要求
![](https://ligo100.cn/wp-content/themes/CorePress/static/img/loading.gif)
![](https://ligo100.cn/wp-content/themes/CorePress/static/img/loading.gif)
浮点数的二进制表示
10进制浮点数转换为二进制表示很简单,分2个部分讨论
- 整数部分:采用除2取余法计算(直到被除数为0)
- 小数部分:采用乘2取整法计算(直到小数部分为0,对于无限小数采取截断方式)
最后用整数二进制表示.小数二进制表示就可以得到完整的浮点数二进制表示了。
下面结合两个例子(精度为float)说明一下:
0.875转换二进制
![](https://ligo100.cn/wp-content/themes/CorePress/static/img/loading.gif)
转换出的二进制表示为:0.111,按照前文将其转换为IEEE 756标准格式:
6.36转换二进制
![](https://ligo100.cn/wp-content/themes/CorePress/static/img/loading.gif)
注意点:
- 整数部分转换时的结果是倒序的(计算出的顺序011,结果110)
- 小数部分转换时的结果是正序的
由于0.36表示为二进制是无限不循环的,所以在达到最大位数时直接截断。
按照前文将二进制表示换为IEEE 756标准格式:
25.125转化成二进制
-
- 整数部分:25(D) = 11001(B)
- 小数部分:0.125(D) = 0.001(B)
- 用二进制科学计数法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)
所以 S = 0,尾数 M = 1.001001(取其 1001001),指数 E = 4 + 127(中间数) = 131(D) = 10000011(B)。填充到 32 bit 中,如下:
参考:
https://zhuanlan.zhihu.com/p/503336736?utm_id=0
https://blog.csdn.net/jiaoyangwm/article/details/129296459
文章目录
关闭
共有 0 条评论