【问题标题】:Is there any provision of Unsigned byte in Java? [duplicate]Java中是否有无符号字节的规定? [复制]
【发布时间】:2017-06-19 15:01:16
【问题描述】:

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

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

输出

-3

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

【问题讨论】:

  • y 的符号扩展本身并不重要,结果的低 8 位仍然是您想要的,所以如果您要转换回字节无论如何它将是正确的。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    你可以利用它。

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

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2013-02-10
      • 2016-07-21
      • 2017-12-03
      • 2013-07-19
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多