天天看點

為什麼需要定義資料類型???

變量和資料類型難舍難分,思考了好久,得出下面這個結論:

變量是記憶體中的一個存儲區域。而資料類型的定義決定了這塊存儲區域的大小。【變量與資料類型的關系】

為什麼需要定義變量存儲區域的大小?

以結果為導向來分析:

Java的整數類型分為4種:byte,short,int,long。

四種的差別在于占用的存儲空間不一樣。

byte占用1個位元組,short占用2個位元組,int占用4個位元組,而long占用8個位元組。

什麼是位元組?

位元組是一種存儲機關的度量。1個位元組等于8位。

什麼是位呢?

位可以了解為計算機的最小機關:0或者是1。也就是是說1個位元組是8個0和1的排列組合:

比如說:00000000,00000001,00000011,......11111111。

那麼在這種情況下1個位元組可以表示多大的數呢?

00000000轉換為十進制依然是0,11111111轉換為十進制是255。

轉換工具:https://tool.lu/hexconvert/

也就是說,一個位元組最大可以表示255而最小1可以表示0。

這是無符号位的情況,如果8位表示正數和負數,那麼8位可以表示的範圍是多大呢?

通常情況下,用第一位來表示正負【0為正,1為負】,這樣算下來8位可以表示的範圍是-127到+127。

曆史長河中,補碼登場

上述引入符号位的8位二進制數可以了解為原碼。對于正數來說,原碼就是補碼,而對于負數來說,保留符号位,其他原碼按位取反加1所得即為補碼。補碼的出現使得加減法隻有加法,簡化了計算結構,提高運算速度。

那麼8位的情況下,用補碼來衡量,可以表達的範圍是-128--127。

為什麼是-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)。

總結:資料類型的區分是一種系統資源配置設定優化的方案。