按位与:为什么我会出现这种行为?
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
时,true
(bool
类型)隐式转换为值为 1
的 int
类型,为此物质 a
也被转换为 int
类型。
但是 (a & (1<<2))
不是 1
,所以 else
是 运行。
你想要更正常的 if (a & (1<<2))
吗?
我这里有这个简单的程序:
#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
时,true
(bool
类型)隐式转换为值为 1
的 int
类型,为此物质 a
也被转换为 int
类型。
但是 (a & (1<<2))
不是 1
,所以 else
是 运行。
你想要更正常的 if (a & (1<<2))
吗?