Unsigned Schichtbetrieb in Java
Könnte jemand sagt mir, wie kann diese Operationen Ergebnisse "sar" eine negative Zahl?
Unsigned Schichtbetrieb in Java
Könnte jemand sagt mir, wie kann diese Operationen Ergebnisse "sar" eine negative Zahl?
data[0]
wird zu int
befördert, bevor der Schichtoperator angewendet wird.
Wenn also beispielsweise data[0]
ist -128,
Sie auf der int -128 die Verschiebung anwenden, deren binäre Darstellung ist:
11111111 11111111 11111111 10000000
Dies führt zu
00000011 11111111 11111111 11111110
Und nachdem Sie das auf byte
zurückgeworfen haben, erhalten Sie eine negative Nummer
11111110 (-2)
Wenn Sie die 1-Bits ignoriert werden sollen, die als Ergebnis der int Förderung hinzugefügt wurden, können Sie schreiben:
byte sar = (byte) ((data[0]&0xff)>>>6);
Das in 2 führen wird (wenn data[0]
ist -128).
Danke, die einzige Möglichkeit, wie ich dieses Schichtverhalten wie normal ohne Vorzeichen machen kann Verschiebung im Bytebereich, das ist [Byte sar = (Byte) (Daten [0] >>> 6 && 0x3).] –
Denn das ist das Ergebnis von 'Daten [0] >>> 6'. – Maroun
Mögliches Duplikat von [Java: Negative Zahl verschieben] (http://stackoverflow.com/questions/29498247/java-shift-negative-number) & [Bitweises Shift-Operator mit Verschiebung um negative Zahl] (http: // stackoverflow .com/q/15603327/876298) & [Bitweises Linksverschiebungsverhalten] (http://Stackoverflow.com/q/19839184/876298) –