1. 程式人生 > >JAVA型別直接輸入超過10位報The literal XXX of type int is out of range 解決辦法

JAVA型別直接輸入超過10位報The literal XXX of type int is out of range 解決辦法

Long.parseLong("XXX")long number=xxxL

java long與int取值範圍的問題

1:long l = 1024*1024*1024*4; //0
2:int i1 = 1024*1024*1024*4; //0
3:int i2 = 220000000000; //錯誤
4:long l1 = 220000000000; //錯誤
5:long l1 = 220000000000L; //正確

1-4都是超過int(-2^31 — 2^31-1)的範圍首先 不如果不加L在後面標明

預設是int型 所以4是錯誤的 5是正確的
3明顯溢位編譯時就判斷錯已經超出範圍
1與2主要涉及到乘法的問題
java在相乘之前不知道你的結果是否溢位
只有在後並賦值

的時候才知道超出了int型別和long型別的範圍,應該是後臺自己處理超出範圍的數導致的結果

當前int型資料達到最大值2147483647時,是第一位為0,其餘31位為全1,01111111111111111111111111111111;再加1則進1,第一位為1,其餘全零,10000000000000000000000000000000。系統把第一位判斷為負號,而且同時代表值,所以是-2147483648,當再繼續相加時,系統會把之前的數當做負數,再加上正數1,則為-2147483647,10000000000000000000000000000001,後面以此類推。結合測試1,當為10000000000000000000000000000000時,即2147483648,再乘以2將溢位,溢位位娶不到,全0,即為00000000000000000000000000000000,此時為0(-2147483648再乘以2為什麼是0的理解) . 再乘以2依然為0.

為什麼32位機int取值範圍是-2^31~2^31-1?為什麼不是-2^31-1~2^31-1?

因為int型別總長度是2^32,所以對於有符號數來說,正負各佔一半,也就是你說的2^31,但是由於0被劃分到屬於正數的範疇(但不是正數)所以正數要比負數少一個數

【最小值:-2^31】為什麼不是-(2^31-1)?