まず|=
、複合ビットごとの 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
final
const
変数の定義は C++ と同じです。ただし、関数がオーバーライドされないようにしたいfinal
場合は、関数が仮想関数でもある場合は、関数ヘッダーの末尾にタグを付けることができます (最初にオーバーライドするために必要です)。ただし、これは C++11 にのみ適用されます。これが私の言いたいことの例です。
最後に、Java では演算子>>>
と呼ばれます。unsigned right shift
通常、>>
ビットをシフトしますが、数値の符号を保持するために左端のビットをそのまま残します。時にはそれはあなたが望むものではないかもしれません. >>>
符号が重要であると仮定する代わりに、常に 0 を配置します。
ただし、C++ では、signed
変数の型の一部である現実です。変数>>
が符号付きの場合は、Java のように右にシフトしますが、変数が符号なしの場合は、Java の符号なし右シフト ( >>>
) 演算子のように動作します。したがって、C++ は、>>
どちらを行うべきかを推測できるため、必要なのは のみです。