Java中float的表⽰范围
float浮点数
float是计算机编程语⾔中常⽤的变量类型,称为单精度浮点数。浮点数不像整数变量只⽤符号位和数值位就能表⽰,float单精度浮点数在计算机占32位(四个字节),它储存在计算机时讲32位划分为三个部分,符号位,指数和尾数。下⾯将从这三个部分理解浮点数的表⽰范围
符号位
符号位最为简单,只占⽤1位最⾼位,0表⽰整数,1表⽰负数。
指数
指数位负责表⽰浮点数中的最⾼位,2^4的话则4为指数部分。也称为阶码
指数部分在32bit内存中占有8位,即表⽰范围是0~255
由于指数部分既可以表⽰正数,也可以表⽰负数,所以它实际并不能表⽰到255左右,将255分为正负两个部分,范围就变成了-
127~128。负数是-127的原因是0这个数有特殊意义,所以不⽤于表⽰范围。**指数部分在运⽤时,会加上偏移量127,**这样包含正数负数,范围就⼜是0 ~ 255了。
尾数
⼩数部分将⼗进制⼩数转换为⼆进制所得。
浮点数转换
以5.8为例,
整数部分5,转化内⼆进制是101,
0.8转化为⼆进制,
浮点型变量float0.82=1.6,取1余0.6
0.62=1.2,取1余0.2
0.22=0.4,取0余0.4
0.42=0.8,取0余0.8
0.82=1.6,取1余0.6
0.62=1.2,取1余0.2
0.2*2=0.4,取0余0.4
…
⽆限循环,所以5.8转换为⼆进制之后是
101.110011001100110011001100…
将⼩数点移动到第⼀个有效数字1后,即为1.0111001100110011001100…
向左偏移了2位,则指数部分为+2,(向右偏移的时候为负)
运⽤指数部分定义规则,5.8的指数部分2加上指数部分偏移量,2+127=129,在⼋位指数位表⽰为10000001。
这样就可以将5.8转换为float类型表⽰了,
符号位0,指数部分10000001,尾数部分截取⼩数后23位,
即01110011001100110011001,
#为什么不取整数部分1? 因为偏移时将⼩数点部分移到了第⼀个有效数字后,所以⼩数点左边必为1,所以可不必花费内存表⽰。
这样5.8存在float类型后的值为
0_1000001_01110011001100110011001。
float的取值范围
经过上⾯的解释,我们便可以知道float的取值范围与精度,
32位float类型,最⾼位符号位不表⽰数值,
之后8位表⽰指数,指数决定了该浮点数的取值范围是2^ -127 ~ 2^ 128,
最后尾数部分23位(⼩数点前必是⼀个1,所以虽然表⽰了24位,但是仅有23位影响精度)即2^23=8388608,正数可表⽰8388608,负数也⼀样,所以float的精度为1677216(8位有效数字)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论