我正在將byte
(8位)類型轉換爲short
(16位)類型,並且在我看來,Java正在投射原始var的值而不是轉換位。Java轉換如何工作?
我解決了這個問題,將8位掩碼應用於結果var:short t = data & 0xFF
。
Java是否在var的值或其位上投射?
我正在將byte
(8位)類型轉換爲short
(16位)類型,並且在我看來,Java正在投射原始var的值而不是轉換位。Java轉換如何工作?
我解決了這個問題,將8位掩碼應用於結果var:short t = data & 0xFF
。
Java是否在var的值或其位上投射?
byte
,short
和int
全部簽名(如長,浮點數和雙精度)。這意味着當你有一個-128到127的字節時,它總是保持-128到127,簡而言之,int,long,float或者double。
如果您想將範圍-128到127映射到0到255,我建議您使用在Java中更易於使用的int
。
byte b = -128;
int i = b & 0xFF; // i == 128
當你有32位或64位寄存器,使用short
局部變量不幫助你就像你可能會認爲,除非你有很多他們的(我的意思是數以百萬計)的BTW字節碼僅允許兩種大小的局部變量,一個槽(布爾型,字節型,短型,浮點型,整型,參考)和兩個槽(長型和雙型)注意:即使在64位JVM上,引用也使用一個「槽」。
唯一的無符號類型是char。
+1提到的類型,但不屬於這些呢? – CloudyMarble
@TwoMore添加了其他三種簽名類型) –
Java將轉換值。數據類型本身負責任何位表示;值假設*甚至不需要在引擎蓋下的位模式。
*如果你建立爲無符號,你需要屏蔽的符號位不使用的位
的Java對待some primitive types有符號數,治療價值的計算機
爲了迂迴,'boolean','char'和'void'沒有簽名。 –
@PeterLawrey我同意,回答更新。謝謝 – CloudyMarble
顯示示例輸入輸出。 – CloudyMarble
你是什麼意思的var和var的var值?是不是位也值? – Ankit