我在 Java 中需要一个无符号的 8 位整数,而 char 似乎是唯一接近它的东西。虽然它的大小是原来的两倍,但它是无符号的,这使得它适用于我想要使用它的用途(编写一个需要无符号字节的基本模拟器)。问题是我听说其他程序员说不应该以这种方式使用 char ,而应该只使用 int 左右。这是真的吗,为什么会这样?
问问题
22771 次
3 回答
5
如果您需要一个无符号 8 位整数,请使用byte
. 在算术运算(实际上符号很重要)中很容易使其无符号为byteValue & 0xFF
于 2013-05-29T08:48:09.417 回答
3
byte
用一些小的转换来表示一个无符号的 8 位整数是完全合理的,或者Guava对UnsignedBytes
你进行转换。
于 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 回答