我一直在测试这段代码:
public class Test {
public static int longToInt(long num) {
return (int) (num);
}
public static void main(String[] args) {
System.out.println(longToInt(100000000L));
}
}
我跑了但是longToInt只返回0.发生了什么事?
答案 0 :(得分:1)
通过删除long
的前32位,将int
投射到long
。如果long
值大于Integer.MAX_VALUE
(2147483647)或小于Integer.MIN_VALUE
(-2147483648),则净效果是您丢失了有效位,结果为"垃圾"
话虽如此,您提供的代码并不像您说的那样......如果您正确编译并运行它。原始版本应该打印一个意外的数字......但不是零。修改后的版本应按预期打印1000000。
...有没有办法在int数中存储一个比Integer.MAX_VALUE大的长数?
没有
严格来说是的......在某些情况下。您可以执行某些操作来映射数字,例如,如果您知道您的数字始终在A
到B
范围内,并且B - A
小于2 32 < / sup>,然后您可以通过从long
中减去int
来将该范围内的A
映射到long
。
但是,如果您在{{1}}中存储的数字域的大小大于2 32 不可能来定义此类映射>。它通常是。
答案 1 :(得分:0)
因为,你给的长期不适合int。给一个较小的长并尝试! int(32位) 长(64位)