Java中是否有任何无符号字节的规定?

时间:2017-02-02 13:50:55

标签: java bit-manipulation type-conversion bitwise-xor

当我对一个字节进行XOR时,让我说-1(字节)和2(int)我得到-3作为结果,而我希望操作给我一个正int。这是由于2的补码表示和类型提升。我想知道是否有一种方法可以在java中使用无符号字节。

int x = 2;
byte y = -1;
System.out.println(x^y);


输出
-3

我发现了两个非常类似的问题herehere。但我想要一些方法或按位操作来返回一个int,后来可以转换为没有2的补码表示的字节。

2 个答案:

答案 0 :(得分:0)

char(和boolean)以外的所有类型都已签名。

要获得无符号 - 等效值,您可以使用更宽的类型并使用掩码:

public static int unsigned(byte value) {
    return value & 0xff;
}

public static int unsigned(short value) {
    return value & 0xffff;
}

public static long unsigned(int value) {
    return value & 0xffffffffl;
}

自Java 8以来,标准API为此提供了方法(例如Byte.toUnsignedInt(…))。

答案 1 :(得分:0)

Java中唯一的无符号类型是char,它是一个16位无符号整数。

你可以利用它。

如果需要,使用& 0xff掩盖更重要的字节。