の使用方法を理解する助けが必要です:は、私はいくつかのコードを継承し、それの一枚を把握することはできません得たビット演算子
byte[] b = new byte[4] { 3, 2, 5, 7 };
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3];
誰もがここで何が起こっているか教えてください。ありがとう!
の使用方法を理解する助けが必要です:は、私はいくつかのコードを継承し、それの一枚を把握することはできません得たビット演算子
byte[] b = new byte[4] { 3, 2, 5, 7 };
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3];
誰もがここで何が起こっているか教えてください。ありがとう!
基本的には、big-endian conversionを使用して、4バイト配列の下位31ビットを整数に変換します。
したがって、{0、0、0、1}のバイト配列は1に変換されます。バイト配列{0、0、1、0}これは、ビット単位の演算子の混合物を介してこれを行う256等
に変換される:
&
はbitwise "and"|
ではbitwise "or"<<
はleft shift operator楽しい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
を取得しますか?それとも単なるテストですか? – Nix
@Nixは彼が本当に関連性があるところですか? – MGZero
@MGZeroこれは答えられていません。 – Nix