3.14159 1e10可以写成1.0×10的10次方
1e5 表示 1.0×10的5次方
int main()
{int n = 9;//4bytefloat* pFloat = (float*)&n;//float 指针访问4的字节printf("n值为:%d", n);//9printf("*pFloat值为:%f\n", *pFloat);//,是以浮点数的视角去看的*pFloat = 9.0;printf("num的值位:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);return 0;//由上得出浮点数和整数在内存中存储是有所区别的return 0;
}
接下来探讨浮点数在内存中如何存储
s是0表示他是负数 s是1表示他是正数
5.5浮点数转换为二进制 101.1 后面是以的原因是后面是2的-1次方 等于2分之1
101.1转换为科学计数法 1.011*2^2
上面是二进制 如果是十进制向左移动两位是×10^2
1.011相当于可以理解为m
(-1)S*M*2E
(-1) ^ 01.0112^2
对于e是无符号整数的补充 float型 要加127 double型要加1023
float在内存中也是倒着存放的
指数e 怎么拿出来
分为三种情况
有了以上基础 再回看第一开始的那道题
int main()
{int n = 9;//4bytefloat* pFloat = (float*)&n;//float 指针访问4的字节printf("n值为:%d", n);//9printf("*pFloat值为:%f\n", *pFloat);*pFloat = 9.0;printf("num的值位:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);return 0;return 0;
}
int main()
{int n = 9;//4byte//00000000000000000000000000001001 9的二进制序列float* pFloat = (float*)&n;//float 指针访问4的字节printf("n值为:%d", n);//9printf("*pFloat值为:%f\n", *pFloat);//整形形式放进去 浮点数形式拿出来.%f打印 纸打印小数点后6位//0 00000000 00000000000000000001001 e为全0的情况 m位还原为0.xxx数字0.00000000000000000001001*2^-126 全0的时候e直接补0// s e m*pFloat = 9.0;printf("num的值位:%d\n", n);//以浮点数形式放进 所以要用到科学计数法//1001.0//1.001*2^3 小数点向左移动三位//E为3 需要加127//0 10000010 00100000000000000000000 //整数在内存中存的是二进制 补码 %d打印认为是有符号数 符号位0原反补相同 所以直接打印这个二进制序列printf("*pFloat的值为:%f\n", *pFloat);return 0;return 0;
}