我有以下代码:
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)。
这是一个问题,因为我想将它用作其他位串的位掩码。是什么导致了这种行为?是否有解决方法来保留预期的位排序?
答案 0 :(得分:0)
BitSet 分配单词(表示为长数组),它们是根据所需的位数创建的。
由于您只想表示一个字节,因此它可以表示为一个字(64位/长)。在64位中,它是小端表示,位从最低有效位到最高有效位。
你可以使用get(int bitIndex)检查自己,它对单词执行“和”操作以返回在该位置设置的位