域名注册局官网,苏州网站关键词优化,安居客官网入口,北京建筑公司招聘信息文章目录 1 float型数据组成2 实际举例3 代码测试4 写在最后 1 float型数据组成 按照IEEE浮点标准存储浮点数时#xff0c;一个float型的值由1个符号位#xff08;最左边的位或最高有效位#xff09;、8个指数位以及23个小数位依次组成: 符号位为0时表示正数#xff0c;为1… 文章目录 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.100101e4。按照IEEE浮点标准计算机存储这个浮点数符号位为08个指数位为131412723个小数位即100101后补零即4849664100 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浮点数在计算机的存储心血来潮想把我的理解给记录下来方便日后再读同时分享给大家才有了这篇博文希望可以帮到各位谢谢