c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程 C语言编程项目 C语言_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1q54y1q79w?我的github主页
remeke (remeke) · GitHubhttps://github.com/remeke今天继续学习了数据的存储内容。
浮点型数据的存储方式
#include#include int main() { int n=9; float *pFloat=(float*)&n; printf("n的值为:%dn",n); printf("*pFloat的值为:%fn",*pFloat); *pFloat=9.0; printf("num的值为:%dn",n); printf("*pFloat的值为:%fn",*pFloat); return 0; }
例如:9.0可以写成二进制1001.0,再化成(-1)^0*1.001*2^3
S-0,M-1.001,E-3
IEEE 754规定:对于32位(double类型)的浮点数,最高的一位是符号位S,接着的8位是指数E,剩下的23位为有效数字M
IEEE 754规定:对于64位(float类型)的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M
IEEE 754还有一些其他的规定
关于M:由于M的第一位总是1,因此可以被省去,只保留后面的小数部分,例如保存1.01的时候,只保存01,等到读取的时候再把第1位的1加上去,这样是为了节省1位有效数字,以double类型为例,等于可以保存24位有效数字。
关于E:由于E是1个无符号整数。如果E为8位,它的取值范围为0-255,如果E为11位,它的取值范围为0-2047,但是再科学计数法中E是可以出现负数的,所以 IEEE 754规定,E的真实值必须再加上一个中间数,对于8位的E,这个中间数为127,对于11位的E,这个中间数是1023.比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001.
指数E从内存中取出还可以再分成三种形式
对于开头的题目的解释:



