本文主要是介绍float单精度浮点数如何在计算机中存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1 float型数据组成
- 2 实际举例
- 3 代码测试
- 4 写在最后
1 float型数据组成
按照
IEEE
浮点标准存储浮点数时,一个float
型的值由1
个符号位(最左边的位或最高有效位)、8
个指数位以及23
个小数位依次组成:
- 符号位为
0
时表示正数,为1
时表示负数。 8
个指数位作为整数理解,可以表达0~255
之间的数,减去127
得到范围-127~128
。-127
和128
分别代表了零和无限大,剩下的-126~127
代表了小数点的位置。-126
是指小数点向左移动126
位,127
是指小数点向右移动127
位。23
个小数位表示了小数点以下的部分,小数部分最左边表示0.5
,即二进制的0.1
;接下来是0.25
,即二进制的0.01
,以此类推。
2 实际举例
上面说了基本的概念,接下来举个例子:
假如有一个float
型数据,值为25.25
,把这个数转为二进制,就是11001.01
,将这个二进制的整数部分固定为1
,使用科学计数法,等价二进制为1.100101+e4
。按照IEEE
浮点标准,计算机存储这个浮点数,符号位为0
,8
个指数位为131(4+127)
,23
个小数位即100101
后补零,即4849664
(100 1010 0000 0000 0000 0000
)。
准确来讲,小数部分是在二进制表达中,为使得整数部分变为
1
而移动小数点得到的小数部分。
3 代码测试
下面使用
C
语言来进行验证:
#include <stdio.h>//下面使用了位域,可以指定结构成员的所占位数(bit)
struct my_float{unsigned int dot:23; //23位小数部分unsigned int e:8; //8位指数部分unsigned int flag:1; //符号位
};//利用联合的特性,来检验float型数据各部分存储的值
typedef union
{float a;struct my_float b;
} bit_32;int main(){bit_32 my_var;my_var.a = 25.25;printf("dot: %d\ne: %d\nflag: %d\n", my_var.b.dot, my_var.b.e, my_var.b.flag);return 0;
}/*
输出:dot: 4849664
e: 131
flag: 0*/
4 写在最后
最近看了一些
C
语言书籍,巧合之下,终于弄明白了之前似懂非懂的float
浮点数在计算机的存储,心血来潮,想把我的理解给记录下来,方便日后再读,同时分享给大家,才有了这篇博文,希望可以帮到各位,谢谢!!
这篇关于float单精度浮点数如何在计算机中存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!