2

C++ の "|=" について質問があります。この演算子がどのように機能するか、たとえば次のようになります。

bool result;

result |= callFunctionOne(sig);
result |= callFunctionTwo(sig);
result |= callFunctionThree(sig);
result |= callFunctionFour(sig);

上記で呼び出された関数は、パラメーター sig が関数で処理される場合は「true」を返し、そうでない場合は「false」を返します。

sig は毎回 1 つの関数でしか処理できませんが、" |=" はどのように機能しますか?

4

4 に答える 4

7

|ビットごとの OR です。

|=は、関数の1つで返されたものを で取得しbitwise ORresultに格納すると言いresultます。これは、次のようなことを行うのと同じです:

result = result | callFunctionOne(sig);

あなたのコード例を取る:

bool result;

result |= callFunctionOne(sig);
result |= callFunctionTwo(sig);
result |= callFunctionThree(sig);
result |= callFunctionFour(sig);

そしてあなたの論理

パラメータ sig が関数で処理される場合は「true」を返し、そうでない場合は「false」を返します。

つまり、結果を定義しない場合、デフォルトでFALSEになります。

result = false;

callFunctionOneTRUE を返します

result = result | callFunctionOne;

resultTRUEに等しい。

result = false;

callFunctionOneFALSE を返します

result = result | callFunctionOne

結果は FALSE です。

これは のように見えるかもしれませんが、本質的に数字またはであるboolean ORを使用しています。bitwise OROR'ing10

1が TRUE に等しく0、FALSE に等しいとすると、真理値表を思い出してください。

p   q   p ∨ q
T   T   T
T   F   T
F   T   T
F   F   F

ここで、各関数を次々と呼び出すため、前の関数の結果が最終的に からの最終結果を決定することを意味しcallFunctionFourます。その中で、4 分の 3 の確率TRUEになり、 4 分の 1 の確率でFALSEになります。

于 2011-09-26T13:04:16.783 に答える
2

a |= bと同等a = a | bです。

于 2011-09-26T13:02:21.833 に答える
1

簡単に言えば、これらの関数のいずれかが を返す場合は に割り当てtrueられ、そうでない場合は割り当てられます。しかし、1 つ問題があります。そうでなければ、このビット操作はランダムな初期値に対して実行され、すべての関数が返されたとしても返される可能性があります。resulttruefalseresultinitializedtruefalse

演算子自体は「ビット単位の包括的 OR」と呼ばれます。

于 2011-09-26T13:02:15.470 に答える
-1

| | 演算子はビットごとの OR です (ブール論理を知っている場合、ブール変数ではブール OR として機能します)。1 つまたは複数の呼び出しが true を返す場合、結果は true になります。すべての呼び出しが false を返す場合、結果は false です。

毎回、結果 = 結果 | と同等です。callFunctionXXX(sig);

注: サンプル コードでは、変数 result は初期化されていません。「bool result = false;」である必要があります。

于 2011-09-26T13:02:12.983 に答える