天天看點

Java中的類型轉換。

首先我們來看自動類型轉換。自動類型轉換有兩個條件: 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位,怎麼轉?

接下來是猜測環節,因為我餓了,稍等去查驗下正确的邏輯。

Java中的類型轉換。

我猜測應該是去掉了紅框中的8位位元組碼。

實際上,以這個數字來說,去掉前8位和去掉紅框中的8位得到的結果都是1,但是,它肯定去掉了紅框中的8位。

你要問為什麼,因為當我用

-16385

去實驗時,得到的結果是

-1

,而且前面也說了,第一位是用來标記正負數的,是以應該也不會算在這個邏輯裡面。

待補充…