c - 理解 C 中的 Float

标签 c variables floating-point

我无法理解 c 中的 float 变量,因此尝试了一些代码并检查值在控制台中的显示方式,

我读了很多关于但没有让我满意的文章 http://www.cquestions.com/2011/02/memory-representation-of-float-data.html 说指数是 8 位而尾数是 24 位,但如果是这样那么指数部分应该在 0 到 256 之间变化或者我很困惑。请帮助我学习这个

void main()
{
  float f="different values below";
  printf('float value is : %f',f);
}

 tried values for f    console output
257.123456              257.123444
256.123456              256.123444
128.123456              128.123459
100.123456              100.123459
10.123456                10.123456

最佳答案

这是对您的一个数字 10.123456 的分析。二进制表示,big-endian,是0100_0001_0010_0001_1111_1001_1010_1101

最高有效位是符号位。为0,表示非负。

接下来的 8 位,10000010,十进制 130,是指数。以余127的形式存储,所以有效指数为130-127 = 3。

正常数字的有效数具有 1.x 的形式,其中 x 是最后 23 位。 1 不存储。您的有效数字是 1.010_0001_1111_1001_1010_1101。

调整为 3 的基数 2 指数,这变成 1010.0001_1111_1001_1010_1101。二进制小数点前的1010对应小数点前的10。小数部分为 129453/(2^20)=0.12345600128173828125。您的 float 的精确值为 10.12345600128173828125

关于c - 理解 C 中的 Float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24668311/

相关文章:

javascript - 了解浮点变量

javascript - 如何使用dojo.number.round实现整数的toFixed功能?

c - GCC 中的动态分配指针数组不匹配

c - C中的中断系统调用

c - 从文件中存储多种类型的数据

sql-server - TSQL变量赋值在 "then"的select case时

javascript - 将 Float32Array 转换为 16 位 float 组缓冲区 JavaScript

c++ - 表达式类型

variables - 为什么 Go 中有两种声明变量的方式,有什么区别,用哪一种?

variables - 如何指定cmake中必须设置和存在的变量