数值类型

整型:

数据类型   所占字节数  位数

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,因此浮点数的范围就出来了。

原文地址:https://www.cnblogs.com/liushao/p/6380810.html