首先我們來看自動類型轉換。自動類型轉換有兩個條件: 1.轉換前後的資料類型相容;2.轉換後的資料類型的範圍大于轉換前的資料類型。
抄的
話不多說 直接上代碼
short sh = 16385;
int in = sh;
byte by = sh;// 這行編譯會報錯。
byte by = (byte) sh;// 要改成強制類型轉換。
我們都知道,機器是隻能識别二進制的代碼,是以我們把
sh
轉成二進制。
sh = 16485 -> 0100 0000 0000 0001
這個時候可能有人會有疑問,為什麼整了個
0100
,
1000
不香嗎?
答案很簡單,
我不想
。
對不起對不起。
實際上是我大意了。沒有閃
我在将
1000 0000 0000 0001
轉換為二進制的時候,得到的結果是
32769
,你們可以試一下,不能存儲為short類型。
有的人可能一開始心裡就有答案,有的人可能還沒想明白。
其實很簡單,
第一位是正負數的标記
。
我不知道怎麼描述的更官方有點,有沒有大佬能補充下…
好了,回到正題。
我們得到了一個二進制的16位的數,如果把它轉為int類型, 也就是32位,學過計算機應該都知道,前面
補0
就完事了,是以結果是:
int in = 16485 -> 0000 0000 0000 0000 0100 0000 0000 0001
最後的結果是不變的,16485,神奇不神奇。
但是,當我們把它強轉為byte類型時,8位,怎麼轉?
接下來是猜測環節,因為我餓了,稍等去查驗下正确的邏輯。
我猜測應該是去掉了紅框中的8位位元組碼。
實際上,以這個數字來說,去掉前8位和去掉紅框中的8位得到的結果都是1,但是,它肯定去掉了紅框中的8位。
你要問為什麼,因為當我用
-16385
去實驗時,得到的結果是
-1
,而且前面也說了,第一位是用來标記正負數的,是以應該也不會算在這個邏輯裡面。