1

我在 Java 中需要一个无符号的 8 位整数,而 char 似乎是唯一接近它的东西。虽然它的大小是原来的两倍,但它是无符号的,这使得它适用于我想要使用它的用途(编写一个需要无符号字节的基本模拟器)。问题是我听说其他程序员说不应该以这种方式使用 char ,而应该只使用 int 左右。这是真的吗,为什么会这样?

4

3 回答 3

5

如果您需要一个无符号 8 位整数,请使用byte. 在算术运算(实际上符号很重要)中很容易使其无符号为byteValue & 0xFF

于 2013-05-29T08:48:09.417 回答
3

byte用一些小的转换来表示一个无符号的 8 位整数是完全合理的,或者GuavaUnsignedBytes你进行转换。

于 2013-05-29T08:37:41.007 回答
3

在 Java 中:

长:[-2^63 , 2^63 - 1]

整数: [-2^31 , 2^31 - 1]

短: [-2^15 , 2^15 - 1]

字节: [-2^7 , 2^7 - 1]

字符: [0 , 2^16 - 1]

您想要一个无符号的 8 位整数意味着您想要一个介于 [0, 2^8 - 1] 之间的值。显然是选择short/int/long/char。

尽管 char 可以被视为无符号整数,但我认为将 char 用于除字符之外的任何内容都是一种糟糕的编码风格。

例如,

public class Test {
public static void main(String[] args) {
    char a = 3;
    char b = 10;

    char c = (char) (a - b);
    System.out.println((int) c); // Prints 65529
    System.out.println((short) c); // Prints -7

    short d = -7;
    System.out.println((int) d); // Prints -7, Please notice the difference with char
}

}

最好使用 short/int/long 进行转换。

于 2013-05-29T09:25:20.927 回答