2

我有一个关于 C++ 中“|=”的问题,这个运算符是如何工作的,例如:

bool result;

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

上面调用的函数,如果在函数中处理了参数sig,则返回“true”,否则返回“false”;

每次只能在一个函数中处理 sig,“ |=”是如何工作的?

4

4 回答 4

7

|是按位或。

|=表示将您的一个函数中返回的内容与 .bitwise OR一起使用result,然后将其存储到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;

callFunctionOne返回TRUE

result = result | callFunctionOne;

result等于TRUE

result = false;

callFunctionOne返回 FALSE

result = result | callFunctionOne

结果等于 FALSE。

虽然看起来这是 a boolean OR,但它仍然使用bitwise OR本质上OR'ing是数字1或的0

因此,假设它1等于 TRUE 并且0等于 FALSE,请记住你的真值表:

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

现在,由于您一个接一个地调用每个函数,这意味着前一个函数的结果最终将决定callFunctionFour. 在那,四分之三的时间,它将是TRUE四分之一的时间,它将是FALSE

于 2011-09-26T13:04:16.783 回答
2

a |= b相当于a = a | b

于 2011-09-26T13:02:21.833 回答
1

简而言之,如果这些函数中的任何一个返回,它将分配true给,否则。但是有一个问题——必须是,否则这个位操作会在随机初始值上执行,即使所有函数都返回也可能返回。resulttruefalseresultinitializedtruefalse

运算符本身称为“按位包含或”

于 2011-09-26T13:02:15.470 回答
-1

该| 运算符是按位或(如果您知道布尔逻辑,则在布尔变量上它充当布尔或)。如果一个或多个调用返回 true,则结果为 true。如果所有调用都返回 false,则结果为 false。

每次都相当于 result = result | callFunctionXXX(sig);

备注:在您的示例代码中,变量结果未初始化。它应该是“布尔结果=假;”

于 2011-09-26T13:02:12.983 回答