就像标题所说,我不明白Java的原始数据类型long
的最大值和最小值是如何小于float
的最大值和最小值。尽管long
为64位且float
为32位。
发生了什么事?
答案 0 :(得分:3)
原因是因为浮点使用浮点精度。 Long可以存储大量精确数字,而我可以存储一个较高的值,但在较低的位中没有相同的精度。
从某种意义上说,浮点数以科学/指数表示法存储值。因此,较大的值可以存储在少量的比特中。想想2 x10 ^ 200,这是一个很大的数字,但可以存储在少量的位中。
答案 1 :(得分:2)
32位float
不仅仅是一个简单的数字,如long
;它分解成了各个领域。字段是:
指数字段被编码(通常,它只是与实数指数的偏移量),但它表示从-126到127的指数。(这涵盖了可能的256个值中的254个;另外两个用于特殊目的。 )尾数表示一个值,该值可以从1到略低于2的值(实际上是2 - 2 -23 )。这意味着最大可能float
是2 127 x(2 - 2 -23 ),或几乎2 128 ,其中大于最大可能的long
值,即2 63 -1。
更多信息: