首页 > 解决方案 > 按位与:为什么我会得到这种行为?

问题描述

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

#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))会输出: 进入 if 块!00000100

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

标签: c++bit-manipulationbitwise-operators

解决方案


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

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

if (a & (1<<2))

或等效地

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

因为在一个if语句中,任何不为零的东西都被考虑true


推荐阅读