我无法理解 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/