2016-07-20 28 views
0

Ich habe den folgenden Code:Bit Order of Java BitSet

byte[] byteArr = new byte[1]; 
byte b = (byte) Integer.parseInt("127"); 
byteArr[0] = b; 
BitSet bs = BitSet.valueOf(byteArr); 

Nach einem Haltepunkt nach der letzten Zeile einstellen, erhalte ich eine unerwartete Debugger Ausgabe:

enter image description here

In binären Begriffen, Es scheint, dass 'bs' den Wert '11111110' hat, während ich erwarte, dass es den Wert '01111111' (127) hat. Es scheint nicht erklärbar mit Kürzung, wie nur die letzten 8 Bits relevant sind (und das MSB von 127 ist nicht festgelegt).

Dies ist ein Problem, weil ich es als Bitmaske für andere Bitstrings verwenden möchte. Was verursacht dieses Verhalten? Gibt es eine Problemumgehung, um die erwartete Bit-Reihenfolge zu erhalten?

+0

Was Position zurück? Das sieht gut aus. Ich bin mir nicht sicher, wie Sie das als "11111110" interpretieren. –

+0

Ich interpretierte {0, 1, 2 ...} als die Indizes der gesetzten Bits innerhalb des BitSet. Da die ersten sieben Bits gesetzt sind, hat das BitSet den Wert '11111110' (dezimal 254). –

+0

@MichaelHang Woher weißt du dann, dass das BitSet 8 Bits repräsentiert? – Manu

Antwort

0

BitSet weist Wörter zu (dargestellt als langes Array) und sie werden abhängig von der Anzahl der benötigten Bits erstellt.

Da Sie nur ein Byte darstellen möchten, so kann es als ein Wort dargestellt werden (mit in 64 Bits/lang). In 64 Bits ist es eine Little-Endian-Darstellung, Bits sind von der geringsten Signifikanz zur höchstwertigen geordnet.

Sie können selbst überprüfen, get verwenden (int BitIndex), das tut „und“ Betrieb auf dem Wort Bit an dieser