将 long 转换为 int 得到 0
Converting long to int gives 0
我一直在测试这段代码:
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。这是怎么回事?
因为,你给的 long 不适合 int。给一个更小的长试试!
整数(32 位)
长(64 位)
将 long
转换为 int
是通过删除 long
的前 32 位来完成的。如果 long
值大于 Integer.MAX_VALUE
(2147483647) 或小于 Integer.MIN_VALUE
(-2147483648),最终结果是您丢失了有效位,结果为 "rubbish".
话虽如此,但您提供的代码并不像您所说的那样...如果您正确编译并 运行 它。原始版本应该打印一个意想不到的数字……但不是零。修改后的版本应该按预期打印 1000000。
... is there a way I can store a long number larger than Integer.MAX_VALUE inside an int number?
没有
严格来说是的......在某些情况下。您可以做一些事情来映射数字,例如,如果您知道您的数字始终在 A
到 B
范围内,并且 B - A
小于 2 32,那么您可以通过从中减去 A
将那个范围内的 long
映射到 int
。
但是,如果您存储在 long
中的数字域的大小大于 232。通常是这样。
我一直在测试这段代码:
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。这是怎么回事?
因为,你给的 long 不适合 int。给一个更小的长试试! 整数(32 位) 长(64 位)
将 long
转换为 int
是通过删除 long
的前 32 位来完成的。如果 long
值大于 Integer.MAX_VALUE
(2147483647) 或小于 Integer.MIN_VALUE
(-2147483648),最终结果是您丢失了有效位,结果为 "rubbish".
话虽如此,但您提供的代码并不像您所说的那样...如果您正确编译并 运行 它。原始版本应该打印一个意想不到的数字……但不是零。修改后的版本应该按预期打印 1000000。
... is there a way I can store a long number larger than Integer.MAX_VALUE inside an int number?
没有
严格来说是的......在某些情况下。您可以做一些事情来映射数字,例如,如果您知道您的数字始终在 A
到 B
范围内,并且 B - A
小于 2 32,那么您可以通过从中减去 A
将那个范围内的 long
映射到 int
。
但是,如果您存储在 long
中的数字域的大小大于 232。通常是这样。