W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Java不支持無(wú)符號(hào)數(shù)據(jù)類型。
byte,short,int和long都是有符號(hào)數(shù)據(jù)類型。
對(duì)于有符號(hào)數(shù)據(jù)類型,值范圍的一半存儲(chǔ)正數(shù),一半用于負(fù)數(shù),因?yàn)橐粋€(gè)位用于存儲(chǔ)值的符號(hào)。
例如,一個(gè)字節(jié)需要8位;其范圍是-128到127.如果您只在一個(gè)字節(jié)中存儲(chǔ)正數(shù),則其范圍將為0到255。
Java在包裝器類中有一些靜態(tài)方法,以支持處理帶符號(hào)值中的位的操作,就像它們是無(wú)符號(hào)整數(shù)一樣。
字節(jié)類包含兩個(gè)靜態(tài)方法:
int toUnsignedInt(byte x) long toUnsignedLong(byte x)
這些方法將指定的字節(jié)參數(shù)轉(zhuǎn)換為int和long,就像該字節(jié)存儲(chǔ)無(wú)符號(hào)值一樣。
如果指定的字節(jié)為零或正,則轉(zhuǎn)換的int和long值將相同。
如果參數(shù)是負(fù)數(shù),則轉(zhuǎn)換的數(shù)字將是28 + x。
例如,對(duì)于-10的輸入,返回的值將是28 +(-10),這是246。
負(fù)數(shù)以2的補(bǔ)碼形式存儲(chǔ)。值-10將被存儲(chǔ)為11110110.最高有效位1表示它是一個(gè)負(fù)數(shù)。
前7位(1110110)的2的補(bǔ)碼將是001010,十進(jìn)制為10。
如果將實(shí)際位11110110視為無(wú)符號(hào)整數(shù),其值為246(128 + 64 + 32 + 16 + 0 + 4 + 2 + 0)。
以下代碼顯示了如何將存儲(chǔ)在字節(jié)中的值作為無(wú)符號(hào)整數(shù):
public class Main { public static void main(String[] args) { byte b = -10; int x = Byte.toUnsignedInt(b); System.out.println("Signed value in byte = " + b); System.out.println("Unsigned value in byte = " + x); } }
上面的代碼生成以下結(jié)果。
Integer類包含以下靜態(tài)方法以支持無(wú)符號(hào)運(yùn)算和轉(zhuǎn)換:
int compareUnsigned(int x, int y) int divideUnsigned(int dividend, int divisor) int parseUnsignedInt(String s) int parseUnsignedInt(String s, int radix) int remainderUnsigned(int dividend, int divisor) long toUnsignedLong(int x) String toUnsignedString(int i) String toUnsignedString(int i, int radix)
以下代碼顯示了對(duì)兩個(gè)int變量的除法運(yùn)算,如同它們的位表示無(wú)符號(hào)值一樣:
public class Main { public static void main(String[] args) { // Two negative integer values int x = -1; int y = -2; // Performs signed division System.out.println("Signed x = " + x); System.out.println("Signed y = " + y); System.out.println("Signed x/y = " + (x / y)); // Performs unsigned division by treating x and y holding unsigned values long ux = Integer.toUnsignedLong(x); long uy = Integer.toUnsignedLong(y); int uQuotient = Integer.divideUnsigned(x, y); System.out.println("Unsigned x = " + ux); System.out.println("Unsigned y = " + uy); System.out.println("Unsigned x/y = " + uQuotient); } }
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: