Java 無符號數(shù)據(jù)類型

2018-01-23 16:23 更新

Java數(shù)據(jù)類型教程 - Java無符號數(shù)據(jù)類型


Java不支持無符號數(shù)據(jù)類型。

byte,short,int和long都是有符號數(shù)據(jù)類型。

對于有符號數(shù)據(jù)類型,值范圍的一半存儲正數(shù),一半用于負(fù)數(shù),因為一個位用于存儲值的符號。

例如,一個字節(jié)需要8位;其范圍是-128到127.如果您只在一個字節(jié)中存儲正數(shù),則其范圍將為0到255。

Java在包裝器類中有一些靜態(tài)方法,以支持處理帶符號值中的位的操作,就像它們是無符號整數(shù)一樣。

字節(jié)類包含兩個靜態(tài)方法:

int  toUnsignedInt(byte x)
long  toUnsignedLong(byte x)

這些方法將指定的字節(jié)參數(shù)轉(zhuǎn)換為int和long,就像該字節(jié)存儲無符號值一樣。

如果指定的字節(jié)為零或正,則轉(zhuǎn)換的int和long值將相同。

如果參數(shù)是負(fù)數(shù),則轉(zhuǎn)換的數(shù)字將是28 + x。

例如,對于-10的輸入,返回的值將是28 +(-10),這是246。

負(fù)數(shù)以2的補(bǔ)碼形式存儲。值-10將被存儲為11110110.最高有效位1表示它是一個負(fù)數(shù)。

前7位(1110110)的2的補(bǔ)碼將是001010,十進(jìn)制為10。

如果將實(shí)際位11110110視為無符號整數(shù),其值為246(128 + 64 + 32 + 16 + 0 + 4 + 2 + 0)。


例子

以下代碼顯示了如何將存儲在字節(jié)中的值作為無符號整數(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é)果。

例2

Integer類包含以下靜態(tài)方法以支持無符號運(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)

以下代碼顯示了對兩個int變量的除法運(yùn)算,如同它們的位表示無符號值一樣:

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é)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號