zszen
zszen

Reputation: 1478

Unexpected results from bitwise logic operation

Given an enumeration defined like so:

enum DebugModeType {
    DebugModeNone = 0,
    DebugModeButton = 1,
    DebugModeFPS = 2,
    DebugModeData = 4
};
#define DebugMode DebugModeButton|DebugModeData

I expect the value of DebugMode&DebugModeFPS to be 0, but I observe it to be 1.

Upvotes: 0

Views: 92

Answers (1)

Richard
Richard

Reputation: 3386

You need parentheses in your macro to overcome operator precedence:

#define DebugMode (DebugModeButton|DebugModeData)

As-is:

DebugMode & DebugModeFPS

= DebugModeButton | DebugModeData & DebugModeFPS

(which is parsed as DebugModeButton | (DebugModeData & DebugModeFPS))

= DebugModeButton | (4 & 2)

= DebugModeButton | 0

= DebugModeButton

= 1

With parentheses as I suggest:

= (DebugModeButton | DebugModeData) & DebugModeFPS

= 5 & DebugModeFPS

= 5 & 2

= 0

Upvotes: 4

Related Questions