java基礎資料類型
-
基礎資料類型
我們可以看到在Java中也存在很多c語言中的基礎資料類型,不同的是C中char型資料隻占有一個位元組而Java中是兩個位元組,同時還有byte short boolean型資料。各種基礎資料類型所占位元組數的大小(機關Byte) 整數型資料 byte 1 取值範圍 -128~127 short 2 取值範圍 -32768 ~ 32767 int 4 取值範圍 -2147483648 ~ 2147483647 long 8 浮點數型資料 float 4 double 8 字元型資料 char 2 布爾型資料 boolean 1 (Ture & false)并不是0 & 1
-
原碼 補碼 反碼(筆記+了解)
在計算機記憶體存儲的二進制都是以補碼的形式進行存儲。原碼就是一個整數的二進制的表示。第一位表示符号位,0表示正,1表示負。 對正數來說,他的原碼、反碼、補碼就是他本身。 如:1的原碼:00000001 其他也為其本身。 對于一個負數來說,情況有所不同。 如:(PTA上一程式填空題) 整形資料用兩個位元組來表示 用二進制表示-127 -127的原碼:10000000 01111111 反碼:符号位不變,其他位取反也就是說,符号位不變 -127的反碼:11111111 10000000 補碼:反碼+1 -127的補碼:11111111 10000001
-
資料之間的類型轉換
記住一個原則:高位轉換為低位時需要進行強制類型轉換,低位轉高位且在低位的取值範圍之内的則不需要,他會實作自動類型轉換。
同時Java中定義整數型資料的時候預設數字為十進制的數為int型資料
很多編譯報錯就是因為類型轉換的問題,
public class test{ public static void main(String[] args){ byte s = 128; /* D:\A>javac test.java test.java:3: 錯誤: 不相容的類型: 從int轉換到byte可能會有損失 byte s = 128; ^ 1 個錯誤 這裡byte型的資料取值範圍隻有127,128超出了範圍. 要使得編譯通過則需要強制類型轉換(可能損失) */ System.out.println(s); } } 同時
那麼為什麼有損失?又是怎麼損失的?
下接老師的圖= =
public class test{ public static void main(String[] args){ byte s = (byte)200; System.out.println(s); //結果為-56,上圖已經計算的有 } } public class test{ public static void main(String[] args){ byte s = (byte)128; System.out.println(s); //結果為-128 } } 為什麼? 個人了解:這裡強制轉換為byte型資料則隻看一個位元組(byte)8位上的補碼。 方法都是這樣,以此類推可以知道強制轉換是如何進行的。 如128轉換後取最後八位為 10000000 (補碼) 11111111 (反碼) 10000000 (原碼)即為-128 //可能反碼錯了感覺-128有點不對勁(此處待修改)
-
注意的點
- long與int
我們知道了long a = 123; 中123預設為int型變量,那麼由低位轉為高位會自動轉換這沒問題,但是 long型資料有8Byte,當123所表示的數需要超過其取值範圍 -2147483648 ~ 2147483647時會出現編譯錯誤。 public class test{ public static void main(String[] args){ long s = 2147483648; /* D:\A>javac test.java test.java:3: 錯誤: 過大的整數: 2147483648 long s = 2147483648; ^ 1 個錯誤 2147483648超出了int的範圍,是以會報錯。 那麼如何解決問題?隻需要在2147483648後添加L即可。 此時2147483648L表示的為long型資料占8個位元組(小寫l不好辨認,是以一般建議寫大寫L) */ System.out.println(s); } } ——結論:定義long型資料時,後面的數字要加L。
- double與float
——雖然float型隻占四個位元組,但是其所表示的範圍比long型大(記住) ——在Java中小數通常預設為double型資料(8byte),這與預設int一樣. public class test{ public static void main(String[] args){ float s = 1.0; /* D:\A>javac test.java test.java:3: 錯誤: 不相容的類型: 從double轉換到float可能會有損失 float s = 1.0; ^ 1 個錯誤 在這裡也是高轉低,需要強制類型轉換才能使得編譯通過。 與上面的long和int一樣,我們采取相似的方法解決這個問題。 在1.0後加上F即可表示1.0位float型資料。 */ System.out.println(s); } } ——結論:定義float型資料時,後面的數字要加F。
- boolean
其值隻能為true 或 false(需注意:true與false不等價于1與0)
同時boolean常常用在判斷條件中。
public class test{ public static void main(String[] args){ boolean s = true; while(s){ System.out.println(s); } //當我們需要結束循環時最好采用改變s的bool值的方式,這樣易于檢視。(代碼量大的時候吧 maybe= =) } } 且其不可轉換為int型
- long與int