Java:为什么不能代表+128?

时间:2012-08-29 18:41:37

标签: java bitset

这部分代码应返回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);

2 个答案:

答案 0 :(得分:5)

因为Java中只有 signed 整数类型。 8位10000000 2 字节的第一位是1 signifies negative number。因此,Java中byte类型的范围是< -128; 127取代。看看这个:

byte b = 127;
byte b2 = (byte)(b + 1);  //-128

答案 1 :(得分:3)

Java仅支持签名short/byte/integer/long

  

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