c - 为什么这个人使用 (1 << 0)?
问题描述
我正在阅读有关函数实现的代码,编写代码的人在他的.h中写了这个:
#define FT_LS_LONG (1 << 0)
#define FT_LS_RECURSIVE (1 << 1)
#define FT_LS_HIDDEN (1 << 2)
#define FT_LS_REVERSE (1 << 3)
#define FT_LS_TIME (1 << 4)
#define FT_LS_LINE (1 << 5)
为什么他使用按位左移而不是其他东西?而且,他可以用什么替换这部分代码?我知道 (1 << 0) == 0000 0001 (1 << 1) == 0000 0010 等。但我不明白你如何使用这些。
解决方案
这些结构通常用于组合成单个单词的标志中。它们可以使用按位或运算符组合,例如:
int flags = FT_LS_LONG | FT_LS_HIDDEN;
在上面的代码中,flags
变量将被设置为 0000 0101。flags
然后可以使用按位与运算符来测试变量,例如:
if (flags & FT_LS_LONG) { foo(); }
if 语句将评估为 true,并且 foo() 函数将被调用。
if (flags & FT_LS_TIME) { bar(); }
if 语句将评估为 false,并且不会调用 bar() 函数。
推荐阅读
- c# - 每个事件完成后如何在自动状态机中发布事件?
- python - ODOO 14,如何通过模板中的rest api渲染另一个模板?
- matlab - MATLAB,fitcknn 使用梅尔频率倒谱系数 (MFCC)
- ruby-on-rails - OmniAuth:secret 或 digest 到底是什么意思?如何获得?
- r - R 计算条件 = 0 的连续天数
- python - 如何在 Python 3.8 中为基类使用带引号的类型注释?
- node.js - 未捕获(承诺)错误:群视频聊天项目中的 InvalidStateError
- node.js - 从插入流“返回”用于 pg-promise
- pip - 为什么我无法通过 PIP 安装 python 模块
- css - CSS 嵌套类定义