Java无符号数据类型

来源:互联网 发布:vb施工管理 编辑:程序博客网 时间:2024/05/19 18:37

Java不支持无符号数据类型。byteshortintlong都是有符号数据类型。对于有符号数据类型,值范围的一半存储正数,一半用于负数,因为一个位用于存储有符号值的符号。

例如,一个字节需要8位; 其范围是-128``到127。如果只在一个字节中存储正数,则其范围将为0255

Java在包装器类中有一些静态方法,以支持处理带符号值中的位的操作,就像它们是无符号整数一样。

Byte 类包含两个静态方法:

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

这些方法将指定的字节参数转换为intlong,就像该字节存储为无符号值一样。如果指定的字节为零或正,则转换的intlong值将相同。如果参数是负数,则转换的数字将为2^8 + x

例如,对于输入-10,返回的值将是2^8 +(-10),也就是246。负数以2的补码形式存储。 值-10将被存储为11110110。最高有效位1表示它是一个负数。

前7位(1110110)的2的补码是001010,十进制为10

如果考虑实际位11110110,在一个字节中作为无符号整数,其值为246(128 + 64 + 32 + 16 + 0 + 4 + 2 + 0)

示例-1

以下代码显示了如何将存储在字节中的值作为无符号整数:

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);  }}
Java

上面的代码生成以下结果。

Signed value in byte   = -10Unsigned value in  byte   = 246
Java

实例-2

Integer类包含以下静态方法以支持无符号运算和转换:

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)
Java

以下代码显示了对两个int变量的除法运算,如同它们的位表示无符号值一样:

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);  }}
Java

上面的代码生成以下结果。

Signed x = -1Signed y = -2Signed x/y  = 0Unsigned x  = 4294967295Unsigned y  = 4294967294Unsigned x/y  = 1
Java
0 0
原创粉丝点击