【发布时间】:2016-07-20 06:31:53
【问题描述】:
我有以下代码:
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 未设置)。
这是一个问题,因为我想将它用作其他位串的位掩码。是什么导致了这种行为?是否有解决方法来保留预期的位顺序?
【问题讨论】:
-
什么?这看起来很好。我不确定您如何将其解释为“11111110”。
-
我将 {0, 1, 2...} 解释为 BitSet 中设置位的索引。由于前七位已设置,因此 BitSet 的值似乎为“11111110”(十进制 254)。
-
@MichaelHang 那你怎么知道BitSet代表8位?
-
byte[] byteArr 填充了单个字节。我假设 BitSet 静态构造函数不会删除尾随的未设置位。此外,使用 Integer.parseInt("254") 运行代码会返回 {1, 2, .., 7}
-
索引
0是最右边的位。所以,{0,1,2,3,4,5,6}表示除了最左边的位之外的每个位都已设置,即01111111。
标签: java byte endianness bitset