Java无符号数据类型

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   = -10
Unsigned 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 = -1
Signed y = -2
Signed x/y  = 0
Unsigned x  = 4294967295
Unsigned y  = 4294967294
Unsigned x/y  = 1

  
  
Java
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值