如果条件与单和(&)

San*_*dip 6 c++

我们都知道&&(double和)for和condition.单个和内部发生的条件如何执行条件.

 if(true & bSuccess)
{
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 13

true & bSuccess
Run Code Online (Sandbox Code Playgroud)

在此表达式中,两个操作数都被提升为int,然后&进行求值.如果bSuccess是真的,你会得到1 & 11(或true).如果bSuccess为false,你会得到1 & 0哪个0(或false)

因此,在布尔值的情况下&&并且&将始终产生相同的结果,但它们不完全等效,因为&它将始终评估它的两个参数,并且&&如果第一个参数为假,则不会评估它的第二个参数.

例:

bool f() { std::cout << "f"; return false; }
bool g() { std::cout << "g"; return true; }

int main()
{
    f() && g(); //prints f. Yields false
    f() & g();  //prints fg or gf (unspecified). Yields 0 (false)
}
Run Code Online (Sandbox Code Playgroud)

  • 按位和逻辑并且*不相同. (3认同)
  • @约翰.谁说他们是谁? (2认同)

Fai*_*Dev 7

在你的情况下,因为bSuccess是bool然后

if(true & bSuccess)完全相同一样if(true && bSuccess)

但是你用过这个:

short i = 3;
short k = 1;
Run Code Online (Sandbox Code Playgroud)

if(i & k) 结果将是真的:

0000 0000 0000 0011 
                    &
0000 0000 0000 0001
-------------------
0000 0000 0000 0001 true
Run Code Online (Sandbox Code Playgroud)

&对单个位进行操作,这里位1在两种情况下都是相同的,因此您的结果是正确的.

希望有所帮助.