首先jdk中定義int占4個字節 ===> 32位(后面全部的計算都是以此為根據的)
32位就是jvm僅僅給分配32個格子的空間,用以存放數據。
總所周知計算機中用0和1存放數據。
那么,32個格子中放滿0或1的方法 有2的32次方種:
所以。這32個格子中。或者說32位的空間能標識10進制的數字:
最小
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
第一種推算法:將二進制最大的數字(32個1)轉換成10進制,即 4294967296;
另外一種推算法:既然有2的32次方種算法,那么依照10進制最大的數就是2的32次方。即4294967296;
可惜。上面這樣的計算的是無符號。即正數。可是java中int有正負之分。所以32個格子中占用一個格子標識正負。
所以僅僅能用31個格子來標識數值。
下圖:
X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
最后int能標識的最大/最小數字是:2的31次方:+/- 2147483648