2015-07-28 59 views
1

參考Herbert Schildt編寫的「Java The Complete Reference」第7版第79頁。 作者說:「如果整數值大於 字節的範圍,則它將以模的形式(整數除以該字節的範圍的其餘部分)減少」。將整數轉換爲java中的字節

在Java字節的範圍是-128到127因此,適合在一字節的最大值是128。如果一個整數值被分配給一個字節,如下所示:

int i = 257; 
byte b; 
b = (byte) i; 

由於257越過127的範圍,257%127 = 3應該存儲在'b'中。 但是得到的輸出爲1而不是3。 我在理解這個概念時出了什麼問題?

+5

'257%128 = 1' – Hacketo

+0

我認爲你引用的作者是錯的。他所說的「字節範圍」是什麼意思?無論你是以127(如你所做的)還是128或256,它都不起作用。 (例如129%128 = 1,而(字節)129 = -127) – Rodney

回答

8

只考慮數字的二進制表示:

257 is represented in binary as 00000000 00000000 00000001 00000001 

當你施放此32位int到8位byte,你只保留最低的8位:

00000001 

這是1

+1

值得一提的是,如果第7位被設置(字節中的最高位),那麼結果將是負值。 – Rodney

2

257 = 00000000 000000000 00000001 00000001的位和一個字節僅由8位組成......

結果只有低8位被存儲,1是輸出。

+0

最後8位的值是1,沒關係。這是否意味着不會有任何模操作? –

+0

不,不會有模操作...它不需要...只有鑄造... – CoderNeji

+0

Modulo是師。鑄造到更小的尺寸會導致截斷,這與分割不同。沒有等效的模數運算,可以對2的恭維簽名數字產生相同的效果。這本書是錯誤的。 – Rodney