Int被视为bool,&operator

Leo*_*Leo 3 c++ int boolean operators

我一直在用我的部分代码挣扎了一段时间,我终于发现问题在于一个简单的测试,它没有给我我期望的结果.

if (2) //=> true
if (2 & true) //=> false
if (bool(2) & true) //=> true
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么第二行导致错误.我的理解是每个非零整数在测试中都被认为是真的.

Luc*_*ore 13

因为按位和之间是2true假的.

&(按位运算符)与&&(逻辑运算符)不同.

true演员int1.

那么2 & true2 & 1哪个是假的-因为0000000000000010 & 0000000000000001 == 0.(位可能会有所不同)

然而bool(2) == 1,1 & 1true.