qq_37133838 2024-12-23 17:52 采纳率: 40%
浏览 7
已结题

关于java浮点型到整型的强制转换

在周志明的《深入理解java虚拟机》一书中,有以下内容:

img


但我用程序测试出现了不一样的结果,具体代码如下:

public static void testCast(){
        double num = -2147483649.25;
        int i = (int) num;
        System.out.println(i);
    }

程序输出`-2147483648`。
按照书中描述,超过目标类型表述范围,会根据符号转化为最大或最小正数。最小正数应该是0吧,跟`-2147483648`结果有冲突。所以书中描述是否有问题?把最小整数打成了最小正数?如果是最小整数就说的通了。
  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    首先,让我们澄清一下关于类型转换的规则。在Java中,当你将一个浮点数强制转换为整数时,会进行向零舍入。这意味着小数部分会被舍去,只留下整数部分。如果结果超出了目标整数类型的范围(对于int类型,这个范围是-2147483648到2147483647),那么会根据数值的符号转换为该类型能表示的最大或最小数值。

    在你提供的例子中,double num = -2147483649.25; 这个数值的整数部分-2147483649超出了int类型能够表示的最小值-2147483648。因此,在进行类型转换时,它会被转换为int类型能够表示的最小值。这就是为什么输出结果是-2147483648

    关于你提到的书中的描述,我认为书中的描述是正确的。书中提到,如果整数值v超出了目标类型T(int或long)的表示范围,将根据v的符号转换为T所能表示的最大或者最小整数。在你的例子中,由于v是负数并且超出了int的表示范围,所以它被转换为了int类型能表示的最小整数。

    关于你提到的“最小正数”,我想可能有一些混淆。当书中提到“最小正数”,它可能是指目标类型能够表示的最小正数值,而不是最小整数。对于int类型来说,它的最小值是-2147483648,而最小正数是0。因此,书中的描述应该是正确的,只是可能在表述上稍有差异。

    希望这可以帮助你理解Java中的浮点到整型的强制转换规则。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月23日