2013-04-16 40 views
1

我正在將byte(8位)類型轉換爲short(16位)類型,並且在我看來,Java正在投射原始var的值而不是轉換位。Java轉換如何工作?

我解決了這個問題,將8位掩碼應用於結果var:short t = data & 0xFF

Java是否在var的值或其位上投射?

+2

顯示示例輸入輸出。 – CloudyMarble

+0

你是什麼意思的var和var的var值?是不是位也值? – Ankit

回答

8

byteshortint全部簽名(如長,浮點數和雙精度)。這意味着當你有一個-128到127的字節時,它總是保持-128到127,簡而言之,int,long,float或者double。

如果您想將範圍-128到127映射到0到25​​5,我建議您使用在Java中更易於使用的int

byte b = -128; 
int i = b & 0xFF; // i == 128 

當你有32位或64位寄存器,使用short局部變量不幫助你就像你可能會認爲,除非你有很多他們的(我的意思是數以百萬計)的BTW字節碼僅允許兩種大小的局部變量,一個槽(布爾型,字節型,短型,浮點型,整型,參考)和兩個槽(長型和雙型)注意:即使在64位JVM上,引用也使用一個「槽」。

唯一的無符號類型是char。

+0

+1提到的類型,但不屬於這些呢? – CloudyMarble

+0

@TwoMore添加了其他三種簽名類型) –

6

Java將轉換值。數據類型本身負責任何位表示;值假設*甚至不需要在引擎蓋下的位模式。

*如果你建立爲無符號,你需要屏蔽的符號位不使用的位