3

Java で次のような 1 行を見つけました。

result |= (b & 0x1f) << shift;

演算子の機能について検索しましたが、が整数値resultであるbと仮定して何をすべきかをまだ理解できません。 この行が何をすることになっているのか誰か教えてもらえますか?shift

更新- ここにあるコードのサンプル部分は次のとおりです

int b, shift = 0, result = 0;
do {
    b = encoded.charAt(index++) - 63;
    result |= (b & 0x1f) << shift;
    shift += 5;
} while (b >= 0x20);
4

2 に答える 2

4

たぶん、この説明があなたを助けるかもしれません:

A. : と の間で (b & 0x1f)論理AND演算を実行します。これは次のことを意味します: の最後の 5 ビットを返します。b0xf1b

B. : 演算結果を左にビット数 A << shiftシフトします。これは、ある量のビットの最後の 5 ビットを左にシフトすることを意味します。shiftAbshift

C. result |= B:自身と演算結果との間resultで論理OR演算を実行した結果を変数に代入します 。これは、ビット数だけ左にシフトされた最後の 5 ビットとの間の論理演算を実行し、その結果を変数に代入することを意味します。resultBORresultbshiftresult

理解できることを願っています。

于 2013-08-26T15:34:15.360 に答える