c++ - 位掩码 : Set different states of an object via set method

标签 c++ class set bit-manipulation member

我有一种 Material ,可以是热的或冷的,白色的或黑色的。状态可以是热和白、热和黑、冷和白、冷和黑。我有以下类(class)

   class myMaterial
    {
    public:
        enum state
        {
            DEFAULT     = 0,
            HOT         = 1 << 0,
            WHITE       = 1 << 1
        };

        void SetState(int);

    private:
        int m_state;
    };


    void myMaterial::SetState(int state)
    {
        m_state = state;
    }

现在在 main() 中,我调用 SetState 方法来设置这些状态

myMaterial material;
material.SetState(myMaterial::HOT);

下面的位运算是否正确,设置所有类型的状态

HOT and WHITE  =>  myMaterial::HOT | myMaterial::WHITE
HOT and BLACK  =>  myMaterial::HOT | ~myMaterial::WHITE
COLD and WHITE =>  ~myMaterial::HOT | myMaterial::WHITE
COLD and BLACK =>  ~myMaterial::HOT | ~myMaterial::WHITE

最佳答案

修改后,问题似乎有点不同,不再需要@adrin 的每个属性 2 位的解决方案。

现在只是:

HOT and WHITE = myMaterial::HOT | myMaterial::WHITE
HOT and BLACK = myMaterial::HOT
COLD and WHITE = myMaterial::WHITE
COLD and BLACK = 0

如果你添加一个额外的位来说明状态是否已知:

UNKNOWN = 0
HOT and WHITE = myMaterial::HOT | myMaterial::WHITE | myMaterial::KNOWN
HOT and BLACK = myMaterial::HOT | myMaterial::KNOWN
COLD and WHITE = myMaterial::WHITE | myMaterial::KNOWN
COLD and BLACK =  myMaterial::KNOWN

关于c++ - 位掩码 : Set different states of an object via set method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379233/

相关文章:

c++ - 树莓派无法接收信号,而在 ubuntu 机器上可以,Qt 程序

android - 警告 : . ../Android.mk:链接器标志中的非系统库

java - 作业 Java - 语法错误,无法调用数组中的方法。

python - 添加号码进行设置

python - 使用集合在字符串内搜索

python - python list(set(a)) 每次都会改变它的顺序吗?

c++ - Qt - 打开窗口的单个实例

C++:我应该如何重新排列这段代码,以便循环检查这两种情况?

swift - 如何使用子类来遵守协议(protocol)

c++ - 从成员 get 方法返回 const 引用