1.爲什麼需要定義數據類型???
2.爲什麼需要定義變量存儲區域的大小?
變量是內存中的一個存儲區域。而數據類型的定義決定了這塊存儲區域的大小。
3.爲什麼需要定義變量存儲區域的大小?
答:以結果爲導向來分析:
Java的整數類型分爲4種:byte,short,int,long。
四種的區別在於佔用的存儲空間不一樣。
byte佔用1個字節,short佔用2個字節,int佔用4個字節,而long佔用8個字節。
5什麼是字節?
字節是一種存儲單位的度量。1個字節等於8位。
6.什麼是位呢?
位可以理解爲計算機的最小單位:0或者是1。也就是是說1個字節是8個0和1的排列組合:
比如說:00000000,00000001,00000011,…11111111。
那麼在這種情況下1個字節可以表示多大的數呢?
00000000轉換爲十進制依然是0,11111111轉換爲十進制是255。
轉換工具:https://tool.lu/hexconvert/
也就是說,一個字節最大可以表示255而最小可以表示0。
這是無符號位的情況,如果8位表示正數和負數,那麼8位可以表示的範圍是多大呢?
通常情況下,用第一位來表示正負【0爲正,1爲負】,這樣算下來8位可以表示的範圍是-127到+127。
歷史長河中,補碼登場
上述引入符號位的8位二進制數可以理解爲原碼。對於正數來說,原碼就是補碼,而對於負數來說,保留符號位,其他原碼按位取反加1所得即爲補碼。補碼的出現使得加減法只有加法,簡化了計算結構,提高運算速度。
那麼8位的情況下,用補碼來衡量,可以表達的範圍是-128–127。
7.爲什麼是-128???(按照補碼計算)
10000001到11111111表示的範圍是1到127,01111110到00000001表示的範圍是-1到-127。
而00000000屬於負數,按位取反加1的結果是10000000表示的數值是-128,但是00000000是負數。
所以8位二進制數在計算機裏存儲的範圍是-128–127。
回到剛剛字節的問題,1字節等於8位而八位可以表示-128–127。這是byte類型的表示範圍。
那如果我想用計算機計算1000加上1000,byte明顯是不可用的。因爲byte表示不了1000這個數值。
而short類型的存儲空間爲2個字節,也就是16位。對於short數據類型來說,能表示多大的數呢?
根據8位的表示範圍推算:- 2的15次方到2的15次方-1=={-32768–32767}
以此類推,int爲4個字節,long爲8個字節,能表示的數更大。
Java通過定義變量的類型來規定變量的內存空間大小,通過階梯式的定義,既有滿足小數值運行的byte類型,也有支持大數值運算的long類型。這樣不僅滿足運算的最大支持(long),同時也能節省系統內存資源(byte)。
總結:數據類型的區分是一種實現面向對象的分類對比和系統資源分配優化的方案。有了數據類型,可以研究世界複雜的熵變。