2017-05-03 36 views
0

有人告訴我,一個符號字節轉換爲Java中的無符號字節,我們可以用公式使用公式將帶符號字節轉換爲無符號字節int unsignedByte = signedByte> = 0? signedByte:256 + signedByte;

int unsignedByte = signedByte >= 0 ? signedByte : 256 + signedByte; 

但舉例來說,如果我有一個從-128 1(字節值範圍的signedByte值至127),並且我使用這個公式,所以1 >= 0的計算結果爲true,因此使用第一表達,導致1 + 1,其等於2。但是我期待在unsignedByte中使用129表示相同的數字嗎?

是不是有什麼毛病我的理解還是這個公式是錯誤的?

一個例子與實際符號和無符號值,將不勝感激!

回答

1

你可以只使用像這樣的位AND運算符:

int unsignedByte = signedByte&255; 

本質上講,這增加了允許的空間,這反過來又改變了決定它是否是負向更高的比特位(31 0指數 )

1

你誤解三元運算符:

int unsignedByte = 
    signedByte >= 0 ? 
     signedByte // you get this 
     : 256 + signedByte; // or this 

,而不是

int unsignedByte = 
    (signedByte >= 0 ? signedByte : 256) 
    + signedByte; 
+0

所以如果我有一個符號字節具有值1,signedByte> = 0的計算結果爲真,則INT UnsignedByte的= 1?但我認爲int unsignedByte應該等於129? – Thor

+2

*「unsignedByte = 1?但我認爲int unsignedByte應該等於129?」*不,這是錯誤的。見:https://en.wikipedia.org/wiki/Two%27s_complement –

+1

爲安全起見,你總是可以把'256 + signedByte'在括號,從而消除所有posssible懷疑。 –

相關問題