【问题标题】:Long is of size 8 bytes then how can it be 'promoted' to float(4 bytes) in JAVA?Long 的大小为 8 个字节,那么如何在 JAVA 中将其“提升”为浮动(4 个字节)?
【发布时间】:2015-10-08 08:24:52
【问题描述】:

我读到在 Java 中 long 类型可以提升为 float 和 double (http://www.javatpoint.com/method-overloading-in-java)。我想问一下,长整数在 JAVA 中占用 8 个字节的内存,而浮点数占用 4 个字节,那么这个提升是如何工作的?如果我们以这种方式推广,我们可能会面临一些数据丢失吗?

另外值得注意的是,所有其他类型的提升都是从较小尺寸的原始数据类型到类似或较大尺寸的数据类型。

  • byte 到 short、int、long、float 或 double
  • 短于 int、long、float 或 double
  • char 转换为 int、long、float 或 double
  • int 到 long、float 或 double
  • long to float or double _______________ Exceptional In case Of Float
  • 浮点数加倍

【问题讨论】:

    标签: java long-integer type-promotion


    【解决方案1】:

    long 使用更多字节,但范围更小:long 不能超过 263float 可以达到大约 2127 .显然,范围的扩大是以降低精度为代价的,但是由于float的范围更大,所以从longfloat的转换是一种提升。

    【讨论】:

      【解决方案2】:

      这个快速测试应该说明原因:

      public class Main {
      
          public static void main(String[] args) {
              System.out.println("Float: " + Float.MAX_VALUE);
              System.out.println("Long: " + Long.MAX_VALUE);
          }
      }
      

      输出:

      Float: 3.4028235E38
      Long: 9223372036854775807
      

      注意 Float 行中的科学记数法。 Float 占用的空间更少,但由于其表示形式,它可以容纳比 Long 更大的数字。

      【讨论】:

        【解决方案3】:

        float 的表示方式与整数类型不同。有关浮动类型的更多信息,请阅读:https://en.wikipedia.org/wiki/Single-precision_floating-point_format。煮熟的内容如下所示:浮点格式由一个符号位、8 位用于指数和 23 位用于值的小数部分组成。该值的计算方式如下:(-1)^signbit * 1.fractionalpart * 2 ^ (exponent - 127)。因此,该算法允许表示比 64 位整数类型更大的值。

        【讨论】:

          猜你喜欢
          • 2012-12-15
          • 2014-05-03
          • 1970-01-01
          • 2012-12-27
          • 2017-01-03
          • 1970-01-01
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多