按位与:为什么我会出现这种行为?

Bitwise AND: why do I get this behaviour?

我这里有这个简单的程序:

#include <iostream>
#include <bitset>

using namespace std;

int main() {

unsigned char a = 0b11100111; 
if((a & (1<<2)) == true) // THIS IS THE LINE
    cout << "Entering if block!" << endl;
else
    cout << "Too bad, maybe next time.." << endl;
bitset<8> x(a & (1<<2));
cout << x << '\n';
}

你能告诉我为什么这个 if((a & (1<<2)) == true) 输出: 太糟糕了,也许下次.. 00000100

虽然此 if((a & (1<<2)) 输出: 如果阻塞则进入! 00000100

我正在使用 g++ -std=c++14 进行编译。

0b100 是一个数字,不应与 true 进行比较。

尝试将您的 if 语句更改为:

if (a & (1<<2))

或等同于

if((a & (1<<2)) != 0)

因为在 if 语句中,任何不为零的值都被视为 true

这体现了使用多余 == true 的陷阱,有些人喜欢使用多余的 == true 以达到所谓的清晰度:有时它会破坏代码。

当计算 (a & (1<<2)) == true 时,truebool 类型)隐式转换为值为 1int 类型,为此物质 a 也被转换为 int 类型。

但是 (a & (1<<2)) 不是 1,所以 else 是 运行。

你想要更正常的 if (a & (1<<2)) 吗?