3 回答

TA貢獻1934條經驗 獲得超2個贊
Java沒有無符號整數的數據類型。
如果需要存儲較大的值,可以定義一個,long而不是一個int。
您也可以使用帶符號的整數,就好像它是無符號的一樣。二進制補碼表示法的好處在于,對于有符號和無符號整數,大多數操作(例如加法,減法,乘法和左移)在二進制級別上都是相同的。但是,一些操作(除法,右移,比較和轉換)是不同的。從Java SE 8開始,Integer該類中的新方法允許您完全使用int數據類型來執行無符號算術:
在Java SE 8和更高版本中,可以使用int數據類型表示無符號的32位整數,其最小值為0,最大值為2 ^ 32-1。使用Integer類可將int數據類型用作無符號整數。像靜態方法compareUnsigned,divideUnsigned等已被添加到Integer類支持算術運算的無符號整數。
請注意,int變量在聲明時仍然是帶符號的,但是現在可以通過使用Integer類中的這些方法來進行無符號算術運算。

TA貢獻1801條經驗 獲得超16個贊
一個int值是帶符號的還是無符號的,取決于位的解釋方式-Java將位解釋為帶符號的值(它沒有無符號的原語)。
如果您有一個要解釋為無符號值的整數(例如,從知道包含無符號值的DataInputStream讀取一個整數),則可以執行以下技巧。
int fourBytesIJustRead = someObject.getInt();
long unsignedValue = fourBytesIJustRead & 0xffffffffl;
請注意,十六進制字面量是一個長字面量,而不是整數字面量是很重要的,因此末尾為“ l”。
添加回答
舉報