铸造的细节为int,从双和长

问题描述 投票:0回答:2

嗨,所以我最近看到很多结构这样的问题

int a= (int) Math.pow(2,32);
System.out.println(a); //prints out Integer.MAX_VALUE

之后,我回答了这个问题原来我听错了,我回答Integer.MIN_VALUE的,但正确答案是Integer.MAX_VALUE的。进一步的测试之后,我意识到任何双,我转换为int大于Integer.MAX_VALUE的只是使INT等于Integer.MAX_VALUE的。例如

int a = (int) ((double) Integer.MAX_VALUE+100);
System.out.println(a); //prints out Integer.MAX_VALUE

进一步的测试后,我意识到,如果你尝试投下长长的为int,似乎为int分配给一个看似随机数。

所以我的问题是。究竟发生了什么事,为什么双值不是当你把它转换为int溢出的整数?而为什么铸造长为int返回一个看似随机数

java casting integer double long-integer
2个回答
1
投票

这些转换的逻辑是Java语言规范,Item 5.1.3的一部分。

你可以看到有,从长时转换为int,最显著位被丢弃,留下至少显著32位。

而且,如果四舍五入一个doublefloat的结果是一个数字,是过小或过大,以表示作为int(或long),最小或最大可表示数将被选择。

有没有办法让我们在这里回答“为什么”的已经在很久以前的决定。但是,这是语言的定义方式,你可以依靠它正在你的工作,任何Java环境相同。


0
投票

用于铸造双重价值为整数,将点值后擦除和其余像舍去双重的价值,并在第一个问题中的int将返回值也可能保存在8个叮咬所以它似乎是所述min.value长= Math.pow(2,32);会给你的Max.value等于和铸造长整数这不是一个随机数。这是隆多的最右边32位对不起,我写不好英语是我的第二语言

© www.soinside.com 2019 - 2024. All rights reserved.