①、float比long类型的存储范围大
long:8个字节 64bit
float:4个字节 32bit
float和long都是用二进制来进行存储的
但是小数会先转成二进制,然后进行处理存储。
float的存储是将4个字节32位划分为3个部分来分别存储正负号,小数部分和指数部分的:
符号位(1位:S):用来存储正负符号,0表示正数,1表示负数。
底数部分(8位:E):使用二进制数来确定小数的精度。
指数部分(23位:M):占用8bit的二进制数,来确定数的范围。
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。所以,float类型的指数可从-126~+127(-127和128作为特殊规定)。
底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit 科学计数法。
IEEE754标准:
vlue = (-1)^S * M * 2^E-127
指数位最大值:8个1 11111111 255
根据IEEE754标准计算得: vlue = (-1)^S * M * 2^255-127 为 vlue = (-1)^S * M * 2^128
那么float表示的范围为 -2^127 ~ 2^127
换算成10进制为:-3.410^38 ~ +3.410^38;
long在内存中占用8个字节64位,符号位占1位,数值表示范围为-2^63~2^63-1。
显然,float的存储范围比long的存储范围要大得多;