[英]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位完成long
。 如果long
值大於Integer.MAX_VALUE
(2147483647)或小於Integer.MIN_VALUE
(-2147483648),則最終結果是丟失了大量位,結果是“垃圾”。
話雖如此,但是如果正確編譯並運行它,您提供的代碼就不會像您說的那樣運行。 原始版本應打印出意外的數字,但不能為零。 修改后的版本應按預期打印1000000。
...有沒有一種方法可以在int編號內存儲一個大於Integer.MAX_VALUE的長整數?
沒有。
好吧,嚴格來說是……在某些情況下。 您可以做一些映射數字的操作,例如,如果您知道數字始終在A
到B
的范圍內,並且B - A
小於2 32 ,則可以將該范圍內的long
int
映射到一個int
從中減去A
但是,如果您long
存儲的數字域的大小大於2 32 ,則在數學上定義此類映射是不可能的 。 通常是哪個。
因為,您給出的時間不適合int。 給出較小的長度並嘗試! int(32位)長(64位)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.