int型大小随系统变化
char型和short固定为一个字节和两个字节,即
在内存中存储方式为一个字节八位对应存储
而float的大小为32位,占四个字节,并不按照一一对应的方式存储,
其32位的由三部分构成,依次是符号位1 指数位8 数据部分23构成
符号位用于表示正负
指数位对应float数据类型的指数部分
数据部分则是float数据类型底数部分
指数部分为了方便比较,采用偏移码的方式使值存储为正数
例如 十进制77.56转换为32位二进制后为
0100 1101.1000 1111 0101 1100 0010 1000 1111 0101
指数形式为 1.0011 0110 0011 1101 0111 0000 1010 00 *2^6
在内存中的结构为 0 符号位 1000 0101 指数部分 由原本的6+127偏移码得来
然后便是23位底数部分,底数部分默认省略了整数部分的1,从小数部分开始存储
即 0011 0110 0011 1101 011
合起来就是 0100 0010 1001 1011 0001 1110 1011 就是float型数据77.56在内存中的存储方式
float的底数部分有效位为23位,所以有效数据最大为2^23=8838608 即有效的数据长度为六位到七位
double型数据长度64位 大小四个字节
其构成也是如下 符号位1位 指数位11位 底数位52位
除了指数位的偏移码由+127变成了+1023,其他的计算方式都一样
因为double的底数位数由float型的23位提升到了52位,所以有效数字也大大提升。达到了15-16位
因为float数据在内存中是一个近似值
所有不可直接用于==或者!=进行判断