long
long:在Java中表示整数类型,占据8字节(即64位)的存储空间
若不考虑正负,则其表示最大范围是:全为零~全为一,即从0~264-1;
但数据在计算机中以二进制的补码存储,即有正负也有相应的反码、补码,那么long所能表示范围是多少呢?
即:
float
在Java中,4字节的float遵循 IEEE 754标准,为单精度浮点数
要表示单精度浮点数,需将数据表示为科学计数法的表示方法,并分离出符号、指数、尾数;详情可见:单精度浮点数表示
那么,单精度浮点数的表示范围是多少呢?
指数:
在IEEE 754标准中,对于指数部分全0和全1具有特殊意义:全0的指数部分表示非规格数,全1的指数部分表示特殊数;
因此,除去全0和全1,指数部分可表示:0000 0001 ~ 1111 1110;即 1 ~ 254,因此减去偏移量,其表示范围实际上是:-126 ~ 127
尾数:
23位尾数,从全0到全1,因为隐藏了整数部分的1(用科学计数法表示二进制数时,1 <= a < 2,因此 a 的整数部分为1)
综上,单精度浮点数的表示范围为:
±a x 2指数:-[1, 1.99999988079071) x 2-126 ~ +[1, 1.99999988079071) x 2127(注意开闭区间)
即:

而,long数据类型所表示的范围为:
因此,4字节的float所表示范围要大于8字节long所表示的范围.
Q:为什么表示浮点数的指数部分时,会有偏移量的存在?——单精度偏移量为127,双精度偏移量为1023
Q:指数部分,全0和全1所表示的特殊数的作用又是什么呢?