1

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

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

输出

-3

我在这里这里发现了两个很好的类似问题。但是我想要一些方法或按位运算来返回一个 int ,它可以在以后转换为没有 2 的补码表示的字节。

4

2 回答 2

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(…))。

于 2017-02-02T13:53:01.127 回答
0

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

你可以利用它。

& 0xff如果需要,可以使用屏蔽掉更重要的字节。

于 2017-02-02T13:53:10.707 回答