当我对一个字节进行XOR时,让我说-1(字节)和2(int)我得到-3作为结果,而我希望操作给我一个正int。这是由于2的补码表示和类型提升。我想知道是否有一种方法可以在java中使用无符号字节。
int x = 2;
byte y = -1;
System.out.println(x^y);
-3
我发现了两个非常类似的问题here和here。但我想要一些方法或按位操作来返回一个int,后来可以转换为没有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
掩盖更重要的字节。