前言:我们在码代码的时候,经常遇到过以整数形式存入,浮点数形式输出;或者浮点数形式存入整数形式输出。输出的结果往往让人意想不到,那么,为什么会发生这样的变化,又是什么导致发生变化,接下来,就让我们从存储内部结构出发,带你深度解刨!
目录
我们以一个例子来说明一切
#include<stdio.h> int main() { int n = 9; float *pFloat = (float *)&n; printf("n的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); *pFloat = 9.0; printf("n的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); return 0; }
这个例子我们将n以整数形式输入,再定义一个指针变量来存n的地址,,分别将n以整数、浮点数形式输出。
输出结果如下
n和*pFloat在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别那么大?
要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法。
浮点数的表示形式
根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式
- (-1)^S*M*2^E
- (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
- M表示有效数字,大于等于1,小于2.
- 2^E表示指数位。
举例来说:
十进制的5.0,写成二