まず|=、複合ビットごとの OR 代入です。a |= bは と同等でa = a | b、そのビットがaまたはのいずれかb(または両方) に設定されている場合、結果の各ビットが設定されます。
各ビットに適用される真理値表は次のとおりです。
a | b | result
--------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
次に、<<=同じですが、ビット単位の OR ではなく、左に少しシフトしています。既存のすべてのビットがその量だけ左に移動され、右が 0 で埋められます。
101 << 1 == 1010
110 << 2 == 11000
finalconst変数の定義は C++ と同じです。ただし、関数がオーバーライドされないようにしたいfinal場合は、関数が仮想関数でもある場合は、関数ヘッダーの末尾にタグを付けることができます (最初にオーバーライドするために必要です)。ただし、これは C++11 にのみ適用されます。これが私の言いたいことの例です。
最後に、Java では演算子>>>と呼ばれます。unsigned right shift通常、>>ビットをシフトしますが、数値の符号を保持するために左端のビットをそのまま残します。時にはそれはあなたが望むものではないかもしれません. >>>符号が重要であると仮定する代わりに、常に 0 を配置します。
ただし、C++ では、signed変数の型の一部である現実です。変数>>が符号付きの場合は、Java のように右にシフトしますが、変数が符号なしの場合は、Java の符号なし右シフト ( >>>) 演算子のように動作します。したがって、C++ は、>>どちらを行うべきかを推測できるため、必要なのは のみです。