一、目录: 1、数据类型详细介绍 2、整型在内存中的存储 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析
二、详解: 1、数据类型详细介绍 数据类型决定了使用这个类型开辟内存空间的大小、和看待内存空间的视角。 C语言数据类型有两大类:内置类型、自定义类型1.1 内置类型 1.1.1整型家族
char short int long 每个类型有signed有符号和unsigned无符号两种类型。
1.1.2浮点型家族
float单精度 double双精度
1.1.3指针类型 1.1.4空类型void 1.2 自定义类型(构造类型)
数组类型 结构体类型struct 枚举类型enum 联合类型union
2、整型在内存中的存储 存的是二进制的补码,存的地址由低到高。
3、大小端字节序介绍及判断 大端(存储)模式:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。 小端(存储)模式:低位—低地址,高位—高地址。 判断: 程序完善: 4、浮点型在内存中的存储解析 我们先来分析如下图中的程序: 第一个值打印的就是整型9; 第二个值,&n是整型,将它强制转换成float型,存储和取的类型不一样; 第三个值,浮点型的数放进去,以整型的形式取出,出错; 第四个值,存取都是float类型,打印正确。 4.1浮点型在内存中的存放: 根据国际标准IEEE754,任意一个二进制浮点数v可以表示成下面的形式: (-1)S*M*2E; (-1)^S表示符号位,当S=0,v为正数;当S=1,v为负数; M表示有效数字,大于等于1,小于2·2^E表示指数位
Eg: 浮点数9.0 二进制1001.0表示 (-1)0*1.001*23 S = 0,M = 1.001,E = 3,所以在内存中只需要存储S、M、E这三个值就可以表示一个浮点数了。
1<M<2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分;在计算机内部存M时,第一位总是1,所以这一位可以被舍去,只保存后面的xxxxxx部分,等读取的时候再把第一位加上去;
E为一个无符号整数,单科学计数法中的E是可以为负数的,所以IEEE754规定,存入内存时,E的真实值必须在加上一个中间数,对于8位的E,这个数是127,对于11位的数,这个数是1023,比如2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。 下面举一个存单精度浮点型5.5的例子: 它在内存中所存的二进制序列(32位)如图所示,推导过程如图。 4.2浮点型从内存中取出: *E既不全为0,也不全为1 此时指数E的值为计算值减去127或1023,得到真实值,再将有效数字M前加上第一位的1; *E全为0 这时,浮点数的指数E等于1 - 127或1 - 1023,得到真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxxxx的小数,这样做是为了表示±0,以及接近于0的很小的数字; *E全为1时,如果有效数字M全为0,表示±无穷大(正负取决于符号位S)。
|