Reputation: 809
I'm trying to do simple bit operations on a 'char' variable; I would like to define 5 constants.
const int a = 0;
const int b = 1;
const int c = 2;
const int d = 3;
const int e = 4;
When I try to set more than one bit of the char, all bits apparently up to the set bit a read as set...here is code I use to set and read bits of the char var:
char var = 0;
var |= c;
var|= d;
BOOL set = false;
if(var & b)
set = true; // reads true
if(var & c)
set = true; // also reads true
if(var & d)
set = true; // also reads true
I read an incomplete thread that says that the operation to set bits may be different for x86...the system I'm using...is that the case here?
Upvotes: 0
Views: 188
Reputation: 24413
Change your definitions to because they way you have defined it some of them has more than one bit set
const int a = 1 << 0;
const int b = 1 << 1;
const int c = 1 << 2;
const int d = 1 << 3;
const int e = 1 << 4;
This way it is evident that each constant only has 1 bit set.
If you want to learn all about the various bit hacks...
Upvotes: 3
Reputation: 61970
You're cutting into your other "bits"' space. Examining a couple gives us:
b = 1 = 0001
c = 2 = 0010
d = 3 = 0011 //uh oh, it's b and c put together (ORed)
To get around this, make each one represent a new bit position:
const int a = 0; //or 0x0
const int b = 1; //or 0x1
const int c = 2; //or 0x2 or 1 << 1
const int d = 4; //or 0x4 or 1 << 2
const int e = 8; //or 0x8 or 1 << 3
You should consider not using 0 if there's a possibility of no bits being set meaning something different, too. The main application for this is to set and check flags, and no flags set definitely shows independence.
Upvotes: 4