按位与:为什么我会得到这种行为?

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

#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进行编译。

lz407854504 回答:按位与:为什么我会得到这种行为?

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

尝试将if语句更改为:

if (a & (1<<2))

或等效地

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

由于在if语句中,所有不为零的内容都被视为true

,

这概括了使用多余的== true的陷阱,有些人出于清楚的目的而喜欢使用它们,有时会破坏代码。

当评估(a & (1<<2)) == true时,true(一种bool类型)被隐式转换为具有值int的{​​{1}}类型,为此{ {1}}也将转换为1类型。

但是a不是int,因此(a & (1<<2))已运行。

您想要更普通的1吗?

本文链接:https://www.f2er.com/2925440.html

大家都在问