在学习Java的过程中,我遇到了一个很有意思的问题,就是为什么Java中float类型的取值范围会大于long类型。
类型名 | 大小/字节 | 取值范围 |
float | 4(32bit) | -3.4E+38 ~ 3.4E+38 |
long | 8(64bit) | -2^63~2^63-1 |
long整型数:具有8个字节(64位),以二进制补码表示的整数,这种类型主要使用在需要比较大整数的系统上。
float类型具有4个字节,包括一个符号位、一个8位二进制指数和一个23位尾数。
float类型在内存中的存储方式:
符号部分(1位) 也就是最高位,用来指示浮点数的正负,当符号位是1时,为负数,符号位是0时,为正数。 指数部分(8位) 占用8bit的二进制数,可表示数值范围为0-255。指数有正有负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128。 尾数部分(23位) 使用二进制数来表示此浮点数的实际值。