Combining an Enum Value Using a Bitmask

I understand that you can use bitmasks in enumeration values, but I don’t know how to create it.

I have a simple enumeration:

enum State
{
    minimizing = 0,
    maximizing,

    minimized,
    maximized
};

The state is always State.minimizedor State.maximizedand may have an additional state when resizing. So you can maximize and minimize

+5
source share
4 answers

I'm going to suggest that it myStateis of your type enum State.

enum , . myState , enum.

enum 1, 2, 4 8 , 4 | 2 = 6. C int, enum, ++. myState = 6 ++. , myState = 4 ++, enum.

C, myState , (, 6).

, , :

typedef enum {
    OTHER,
    MINIMIZED,
    MAXIMIZED
} win_size_t;

typedef struct {
    win_size_t current;
    win_size_t next;
} state_t;

state_t myState;

, current next .

, . , . , ( C, enum - int).

typedef struct {
    win_size_t current : 2;  // not tested
    win_size_t next : 2;
} state_t;

, . , myState enum State as, enum , .

, myState , .


myState enum State, , enum .

enum State {
    MINIMIZING = (1u << 0),
    MAXIMIZING = (1u << 1),
    MINIMIZED  = (1u << 2),
    MAXIMIZED  = (1u << 3),
};

unsigned int myState = 0;

myState |= MAXIMIZED;  // sets that bit
myState &= ~MAXIMIZED; // resets that bit

:

myState = MAXIMIZED | MINIMIZING;

, :

myState = MAXIMIZED | MINIMIZED;  // does that make sense?
+16

, :

enum State 
{
  minimizing = 0x01, // 00000001
  maximizing = 0x02, // 00000010
  minimized  = 0x04, // 00000100
  maximized  = 0x08  // 00001000
}:

(minimizing | maximized) (bool is_minimized = (flags & minimized);).

+12

, , . , :

enum State
{
    minimizing = 1,
    maximizing = 2,

    minimized = 4,
    maximized = 8
};

, (State.maximized | State.minimizing). State.maximized State.minimized. , , , , .

+2

VS2012, , , - , .

struct BITS { int x: 1; int y:1; };

BITS b;
b.x = b.y = 1;

.

+2

All Articles