【发布时间】:2010-07-07 23:57:33
【问题描述】:
在 C++ 中是否可以在不使用#define 的情况下在 C++ 中以另一种方式定义 BIT0、BIT1、BIT2?
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
然后我用同样的东西从这些位中创建状态:
#define MOTOR_UP BIT0
#define MOTOR_DOWN BIT1
注意:我只使用 32 位,而不是 64 位。我还使用setBit(flagVariable, BIT)(因此使用clrBit 宏来执行相反操作)宏来设置位,然后比较该位是否使用按位运算符设置,例如
if (flagVariable & MOTOR_UP) {
// do something
clrBit(flagVariable, MOTOR_UP);
}
C++ 中是否存在已经包含这些位掩码的类型?
【问题讨论】:
-
我很好奇您的编号方案 - 我知道 Bit0 是最低有效位,但为什么 Bit1 是第 3 个最低有效位,而 Bit2 是第 4 个?要么您缺少 0x00000002,要么您的做法非常不一致且令人困惑。
-
我很好奇为什么这是用宏定义的。在 C++ 代码中使用
#define作为常量是非常糟糕的做法。 -
setBit 是一个宏,它设置位,而 clrBit 清除位。代码是很久以前从 C 移植过来的。
标签: c++ bitmap bit-manipulation c-preprocessor