当我对一个字节进行异或运算时,可以说 -1(以字节为单位)与 2(int)我得到 -3 作为结果,而我希望该操作给我一个正整数。这是由于 2 的补码表示和类型提升。我想知道是否有办法在java中使用无符号字节。
int x = 2;
byte y = -1;
System.out.println(x^y);
输出
-3
我在这里和这里发现了两个很好的类似问题。但是我想要一些方法或按位运算来返回一个 int ,它可以在以后转换为没有 2 的补码表示的字节。
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(…)
)。
Java 中唯一的无符号类型是 a char
,它是一个 16 位无符号整数。
你可以利用它。
& 0xff
如果需要,可以使用屏蔽掉更重要的字节。