C语言中数据的类型可分为五种:
整型、浮点型、构造类型、指针类型、空类型
一、整型的表示有三种:原码,反码,补码。
整型的二进制位的最高位表示符号位,1表示负数,0表示整数。
原码 直接将二进制按照正负数的形式翻译成二进制就可以。 反码 将原码的符号位不变,其他位依次按位取反就可以得到了。 补码 反码+1就得到补码。 正数的原、反、补码都相同。 对于整形来说:数据存放内存中其实存放的是补码。
为什么: 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统 一处理; 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程 是相同的,不需要额外的硬件电路。
二、浮点型
浮点型的存储方式与整型的方式有所不同
V是一个2进制浮点数
(-1)^S * M * 2^E (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。
例如:
10的二进制是110
根据浮点型的存储方式,因为M要大于等于1,小于2,所以我们需要改变一下他的表达方式,1.1*2^2; 对于32位的浮点数,最高的1位是符号位s,也就是符号位,接着的8位是指数E,剩下的23位为有效数字M。
单精度浮点型:
![](https://i-blog.csdnimg.cn/blog_migrate/1d404df4b59a1f434ba0df88c1b6c65c.png)
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。 双精度浮点型:
![](https://i-blog.csdnimg.cn/blog_migrate/90b9e59882e7b6ad358d41216411671a.png)
指数E为一个无符号整数(unsigned int) 这意味着,如果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从内存中取出还可以再分成三种情况: 1.E不全为0或不全为1 这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将 有效数字M前加上第一位的1,(一般情况都是如此 )。
2.E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于 0的很小的数字。
3. E全为1 这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);