Java位集的位序

Java位集的位序,java,byte,endianness,bitset,Java,Byte,Endianness,Bitset,我有以下代码: byte[] byteArr = new byte[1]; byte b = (byte) Integer.parseInt("127"); byteArr[0] = b; BitSet bs = BitSet.valueOf(byteArr); 在最后一行后面设置断点后,我得到一个意外的调试器输出: 在二进制术语中,“bs”的值似乎是“11111110”,而我希望它的值是“01111111”(127)。它似乎不能用截断来解释,因为只有最后8位是相关的(127的MSB是未设置

我有以下代码:

byte[] byteArr = new byte[1];
byte b = (byte) Integer.parseInt("127");
byteArr[0] = b;
BitSet bs = BitSet.valueOf(byteArr);
在最后一行后面设置断点后,我得到一个意外的调试器输出:

在二进制术语中,“bs”的值似乎是“11111110”,而我希望它的值是“01111111”(127)。它似乎不能用截断来解释,因为只有最后8位是相关的(127的MSB是未设置的)

这是一个问题,因为我想将其用作其他位字符串的位掩码。是什么导致了这种行为?是否有保留预期位顺序的解决方法?

位集分配字(表示为长数组),并根据所需的位数创建字

因为您只想表示一个字节,所以它可以表示为一个字(64位/长)。在64位中,它是小尾端表示,位的顺序是从最低有效到最高有效


您可以使用get(int-bitIndex)检查自己,它对单词执行“and”操作,以返回在该位置设置的位

什么?看起来不错。我不知道你是如何解释为“11111110”的。我把{0,1,2…}解释为位集中集合位的索引。由于设置了前七位,因此该位集的值似乎为'11111110'(十进制254)。@MichaelHang那么您如何知道该位集代表8位?字节[]byteArr中填充了一个字节。我假设位集静态构造函数不会删除尾随的未设置位。另外,使用Integer.parseInt(“254”)运行代码返回{1,2,…,7}索引
0
是最右边的位。因此,
{0,1,2,3,4,5,6}
意味着除了最左边的位之外,每个位都被设置,即
0111111