2016-05-18 12 views
-1

enter image description here符号なしシフト動作が

でした誰もがどのようにすることができます。この操作の結果、「SAR」負の数を私に語りましたか?

+2

これは 'data [0] >>> 6'の結果です。 – Maroun

+1

[Java:シフトマイナス数](http://stackoverflow.com/questions/29498247/java-shift-negative-number)&[マイナスシフトしたビットワイズシフト演算子]の重複している可能性があります(http:// stackoverflow .com/q/15603327/876298)&[ビット単位の左シフト動作](0120-18491-1)・ –

答えて

4

data[0]は、シフト演算子が適用される前にintに昇格されます。

したがって、例えば、data[0]はあなたがバイナリ表現であるint型-128、上のシフトを適用している、

-128の場合:

11111111 11111111 11111111 10000000 

これは

00000011 11111111 11111111 11111110 
になり

byteにキャストした後、負の数値になります。

      11111110 (-2) 

あなたはint型のプロモーションの結果として追加された1ビットを無視したい場合は、あなたが書くことができます。

byte sar = (byte) ((data[0]&0xff)>>>6); 

data[0]が-128のとき)これは2になります。

+0

このシフト動作を通常の符号なしのようにすることができる唯一の方法ありがとう[byte sar =(byte)(data [0] >>> 6 && 0x3)であるバイト範囲内のシフト] –

関連する問題