4

这部分代码应该返回以 LittleEndian 表示的 10000000,然后是 128,但它返回 -128。我知道 128 在二进制表示中与 -128 相同,但为什么不能表示 128?

BitSet bset = new BitSet();
bset.set(7);
byte[] bitarray = bset.toByteArray();
for (byte b: bitarray)
 System.out.println(b);
4

2 回答 2

5

因为Java中只有有符号整数类型。8 位 10000000 2字节的第一位是 1,表示负数。因此byteJava中的类型范围是<-128;127>。看一下这个:

byte b = 127;
byte b2 = (byte)(b + 1);  //-128
于 2012-08-29T18:42:59.220 回答
3

Java 仅支持带符号的 short/byte/integer/long

byte:byte 数据类型是一个 8 位有符号二进制补码整数。它的最小值为 -128,最大值为 127(含)。字节数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。它们也可以用来代替 int ,它们的限制有助于澄清您的代码;变量范围有限的事实可以作为一种文档形式

于 2012-08-29T18:43:21.047 回答