整型:
数据类型 所占字节数 位数
int 2 16位
short 2 16位
long 4 32位
浮点型:
一定要记住,浮点数没有无符号型的,unsigned float/double是错误的。
数据类型 所占字节数 位数
(单精度型)float 4 32位
(双精度型)double 8 64位
类型 指数长度 尾数长度
float 8 位 23 位
double 11 位 52 位
它们占的字节数不一样。float点四字节,32位,用了23位来表示有效位,转成十进制数就是六到七位有效位,即最高位非0开始,精度在六位数的可以保证它是正确的,第七位数小一点在23位二进制的表示范围内也能保证正确,超过这七位数的,不保证它正确。
double点八字节,64bit,用52bit表示尾数,转成十进制,它的有效位可以达到16位。
在IEEE754标准中,规定,float的32位这样分:
这里应该注意三点:
A.阶码是用移码表示的,这里会有一个127的偏移量,它的127相当于0,小于127时为负,大于127时为
正,比如:10000001表示指数为129-127=2,表示真值为2^2,而01111110则表示2^(-1);
B.尾数全都是小数点后面的数;
接下来只要说明几个问题就明白了,以123.456为例,表示为二进制就是:N (2) = 1111011.01110100101111001,这里,会右移6位,得到N (2) = 1.111011 01110100101111001*2^6; 这种形式就可以用于上图中的表示格式了。
注意到,上面的阶码第一位为0表示正。
阶码的示数位数是8位移码,最大为127最小为-127,这里的127用来作为2的指数,因此为2^127,约等于 1.7014*10^38, 而我们知道,float的示数范围约为-3.4*10^38—3.4*10^38, 这是因为尾数的24位(默认第一位为1)全为时,非常接近2, 1.11…11很明显约为2,因此浮点数的范围就出来了。