2011-08-09 12 views
10

の使用方法を理解する助けが必要です:は、私はいくつかのコードを継承し、それの一枚を把握することはできません得たビット演算子

byte[] b = new byte[4] { 3, 2, 5, 7 }; 
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3]; 

誰もがここで何が起こっているか教えてください。ありがとう!

+0

を取得しますか?それとも単なるテストですか? – Nix

+0

@Nixは彼が本当に関連性があるところですか? – MGZero

+0

@MGZeroこれは答えられていません。 – Nix

答えて

20

基本的には、big-endian conversionを使用して、4バイト配列の下位31ビットを整数に変換します。

したがって、{0、0、0、1}のバイト配列は1に変換されます。バイト配列{0、0、1、0}これは、ビット単位の演算子の混合物を介してこれを行う256等

に変換される:

+0

これに関する詳細情報は?リンクなど私はそれを感謝したいと思います。 – Kizz

+0

@Kizz:各オペレータのリンクを編集していただけです。他に何か要りますか? –

+0

@ジョン:ありがとう! – MTG

5

楽しいso..for分のビット演算を行っていないです [余分な括弧は、OPSの順序を示すため]

((b[0] & 0x7f) << 24) | (b[1] << 16) | (b[2] << 8) | b[3] 

(b[0] & 0x7f) << 24 = 11 0000 0000 0000 0000 0000 0000 
b[1] << 16 = . . . . . . . . . . 10 0000 0000 0000 0000 
b[2] << 8 = . . . . . . . . . . . . . . . 101 0000 0000 
b[3] = . . . . . . . . . . . . . . . 0111 

今ORこれら一緒に、あなたはあなたが私たちにこのコードを発見した場所について少しコンテキストを与えたい

0011 0000 0010 0000 0101 0000 0111 = 50,464,007 
関連する問題