c++ - 按位与:为什么我会得到这种行为?
问题描述
我在这里有这个简单的程序:
#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 进行编译。
解决方案
0b100
是一个数字,不应与 true 进行比较。
尝试将您的 if 语句更改为:
if (a & (1<<2))
或等效地
if((a & (1<<2)) != 0)
因为在一个if
语句中,任何不为零的东西都被考虑true
。
推荐阅读
- python - 通过相关类构造函数的 SQLAlchemy 关联数据
- php - 无法使用 php 生成 CSV 文件
- matlab - 等高线图中水平值的总和
- python - 在 Pandas 中使用相同格式从一个 Excel 获取数据并写入另一个 Excel
- wordpress - 主页布局自动更改
- google-chrome - Progressive Web Apps - 有没有办法关闭 Chrome 显示的启动画面,或者至少控制启动画面何时消失?
- java - 如何将 maven 目标更改为图片中的 quickicon?
- python - python pandas分析数据框
- kotlin - 如何退出 Kotlinc 命令行编译器
- reactjs - 将 props 传递给 React 的无状态组件时换行