将long转换为int得0

时间:2015-01-04 04:41:08

标签: java int type-conversion long-integer

我一直在测试这段代码:

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.发生了什么事?

2 个答案:

答案 0 :(得分:1)

通过删除long的前32位,将int投射到long。如果long值大于Integer.MAX_VALUE(2147483647)或小于Integer.MIN_VALUE(-2147483648),则净效果是您丢失了有效位,结果为"垃圾"


话虽如此,您提供的代码并不像您说的那样......如果您正确编译并运行它。原始版本应该打印一个意外的数字......但不是零。修改后的版本应按预期打印1000000。


  

...有没有办法在int数中存储一个比Integer.MAX_VALUE大的长数?

没有

严格来说是的......在某些情况下。您可以执行某些操作来映射数字,例如,如果您知道您的数字始终在AB范围内,并且B - A小于2 32 < / sup>,然后您可以通过从long中减去int来将该范围内的A映射到long

但是,如果您在{{1}}中存储的数字域的大小大于2 32 不可能来定义此类映射>。它通常是。

答案 1 :(得分:0)

因为,你给的长期不适合int。给一个较小的长并尝试! int(32位) 长(64位)