double
类型与
float类型相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,float
占4字节(32位)内存空间,其数值范围为-3.4E38~3.4E+38,;双精度型占8 个字节(64位)内存空间,其数值范围为-1.7E308~1.7E+308。
1、float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
一个浮点数有2部分组成:底数m和指数e
一个浮点数有2部分组成:底数m和指数e
底数部分m: 使用二进制数来表示此浮点数的实际值
指数部分e: 占用8bit的二进制数,可表示数值范围为0-255
指数部分e: 占用8bit的二进制数,可表示数值范围为0-255
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。所以,float类型的指数可从-126到128
底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit科学计数法。
格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
eg:17.625f在内存中的存储
首先要把17.625f换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位
1.0001101 * 2^4 因为右移动了四位
这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011符号部分是整数,
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011符号部分是整数,
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
2、double类型数字在计算机中用8个字节存储。同样遵循IEEE-754格式标准:
一个浮点数有2部分组成:底数m和指数e。只是存储内存结构不同
底数部分m: 使用二进制数来表示此浮点数的实际值
指数部分e: 占用11bit的二进制数,可表示数值范围为0-2024
指数部分e: 占用11bit的二进制数,可表示数值范围为0-2024
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。所以,float类型的指数可从-126到128
底数部分实际是占用53bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占52bit科学计数法。
格式:
SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
eg:17.625在内存中的存储
分析过程如上文所示。
17.625在内存中的存储格式是:
01000001 10000001 10100000 00000000
00000000 00000000 00000000 00000000