Velocity Reviews > C++ > bitwise OR AND, etc.

# bitwise OR AND, etc.

Travis
Guest
Posts: n/a

 09-14-2007
I don't have too much experience with bitwise operations. Here is what
I'm trying to accomplish. I have enum say:

enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

Then I have an int that represents some combination of that enum,
like:

int WhoIsAllowed = BILL | KATIE | JOHN;

Then I wanted to be able to check an instance against the
WhoIsAllowed. like:

int KnockingAtDoor = BILL;

How can I check to see if BILL is in fact on the WhoIsAllowed?

I thought something like

if (KnockingAtDoor & WhoIsAllowed) { // let him in }

but it doesn't seem to be working.

Thanks.

Ian Collins
Guest
Posts: n/a

 09-14-2007
Travis wrote:
> I don't have too much experience with bitwise operations. Here is what
> I'm trying to accomplish. I have enum say:
>
> enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }
>
> Then I have an int that represents some combination of that enum,
> like:
>
> int WhoIsAllowed = BILL | KATIE | JOHN;
>
> Then I wanted to be able to check an instance against the
> WhoIsAllowed. like:
>
> int KnockingAtDoor = BILL;
>
> How can I check to see if BILL is in fact on the WhoIsAllowed?
>

Change the enum so BILL has one bit set.

--
Ian Collins.

Travis
Guest
Posts: n/a

 09-14-2007
On Sep 14, 3:43 pm, Ian Collins <(E-Mail Removed)> wrote:
> Travis wrote:
> > I don't have too much experience with bitwise operations. Here is what
> > I'm trying to accomplish. I have enum say:

>
> > enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

>
> > Then I have an int that represents some combination of that enum,
> > like:

>
> > int WhoIsAllowed = BILL | KATIE | JOHN;

>
> > Then I wanted to be able to check an instance against the
> > WhoIsAllowed. like:

>
> > int KnockingAtDoor = BILL;

>
> > How can I check to see if BILL is in fact on the WhoIsAllowed?

>
> Change the enum so BILL has one bit set.
>
> --
> Ian Collins.

I'm sorry I'm not sure what you mean?

Travis
Guest
Posts: n/a

 09-14-2007
On Sep 14, 3:47 pm, Travis <(E-Mail Removed)> wrote:
> On Sep 14, 3:43 pm, Ian Collins <(E-Mail Removed)> wrote:
>
>
>
> > Travis wrote:
> > > I don't have too much experience with bitwise operations. Here is what
> > > I'm trying to accomplish. I have enum say:

>
> > > enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

>
> > > Then I have an int that represents some combination of that enum,
> > > like:

>
> > > int WhoIsAllowed = BILL | KATIE | JOHN;

>
> > > Then I wanted to be able to check an instance against the
> > > WhoIsAllowed. like:

>
> > > int KnockingAtDoor = BILL;

>
> > > How can I check to see if BILL is in fact on the WhoIsAllowed?

>
> > Change the enum so BILL has one bit set.

>
> > --
> > Ian Collins.

>
> I'm sorry I'm not sure what you mean?

As in don't start with 0 so that every value has at least some bit
set? I'll try that. Thanks.

Travis
Guest
Posts: n/a

 09-14-2007
On Sep 14, 3:52 pm, Travis <(E-Mail Removed)> wrote:
> On Sep 14, 3:47 pm, Travis <(E-Mail Removed)> wrote:
>
>
>
> > On Sep 14, 3:43 pm, Ian Collins <(E-Mail Removed)> wrote:

>
> > > Travis wrote:
> > > > I don't have too much experience with bitwise operations. Here is what
> > > > I'm trying to accomplish. I have enum say:

>
> > > > enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

>
> > > > Then I have an int that represents some combination of that enum,
> > > > like:

>
> > > > int WhoIsAllowed = BILL | KATIE | JOHN;

>
> > > > Then I wanted to be able to check an instance against the
> > > > WhoIsAllowed. like:

>
> > > > int KnockingAtDoor = BILL;

>
> > > > How can I check to see if BILL is in fact on the WhoIsAllowed?

>
> > > Change the enum so BILL has one bit set.

>
> > > --
> > > Ian Collins.

>
> > I'm sorry I'm not sure what you mean?

>
> As in don't start with 0 so that every value has at least some bit
> set? I'll try that. Thanks.

This brings up another question, is it possible to search for the
absence of someone. Like

pseudo
if Zack ISNOTIN WhoIsAllowed
{
}

Gianni Mariani
Guest
Posts: n/a

 09-14-2007
Travis wrote:
> I don't have too much experience with bitwise operations. Here is what
> I'm trying to accomplish. I have enum say:
>
> enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

write this like so:

enum myEnum { BILL = 1<<0, KATIE = 1<<1, JOHN = 1<<2 };

>
> Then I have an int that represents some combination of that enum,
> like:
>
> int WhoIsAllowed = BILL | KATIE | JOHN;
>
> Then I wanted to be able to check an instance against the
> WhoIsAllowed. like:
>
> int KnockingAtDoor = BILL;
>
> How can I check to see if BILL is in fact on the WhoIsAllowed?
>
> I thought something like
>
> if (KnockingAtDoor & WhoIsAllowed) { // let him in }
>
> but it doesn't seem to be working.
>
> Thanks.
>

Ian Collins
Guest
Posts: n/a

 09-14-2007
Travis wrote:

>
> This brings up another question, is it possible to search for the
> absence of someone. Like
>
> pseudo
> if Zack ISNOTIN WhoIsAllowed
> {
> }
>

Yes, use bitwise and.

--
Ian Collins.

Jim Langston
Guest
Posts: n/a

 09-14-2007
"Travis" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) oups.com...
> On Sep 14, 3:52 pm, Travis <(E-Mail Removed)> wrote:
>> On Sep 14, 3:47 pm, Travis <(E-Mail Removed)> wrote:
>>
>>
>>
>> > On Sep 14, 3:43 pm, Ian Collins <(E-Mail Removed)> wrote:

>>
>> > > Travis wrote:
>> > > > I don't have too much experience with bitwise operations. Here is
>> > > > what
>> > > > I'm trying to accomplish. I have enum say:

>>
>> > > > enum myEnum { BILL = 0, KATIE = 1, JOHN = 2 }

>>
>> > > > Then I have an int that represents some combination of that enum,
>> > > > like:

>>
>> > > > int WhoIsAllowed = BILL | KATIE | JOHN;

>>
>> > > > Then I wanted to be able to check an instance against the
>> > > > WhoIsAllowed. like:

>>
>> > > > int KnockingAtDoor = BILL;

>>
>> > > > How can I check to see if BILL is in fact on the WhoIsAllowed?

>>
>> > > Change the enum so BILL has one bit set.

>>
>> > > --
>> > > Ian Collins.

>>
>> > I'm sorry I'm not sure what you mean?

>>
>> As in don't start with 0 so that every value has at least some bit
>> set? I'll try that. Thanks.

>
> This brings up another question, is it possible to search for the
> absence of someone. Like
>
> pseudo
> if Zack ISNOTIN WhoIsAllowed
> {
> }

Lets say Joe is 1 (1<<0)
Lets say Zack is 2 (1<<1)
Lets say Bill is 4 (1<<2)

Lets say WhoIsAllowed is
int WhoIsAllowed = Joe | Bill;

Now, you want to know if Zack is allowed.

if (WhoIsAllowed & Zack )
// allowed
else
// Not allowed

WhoIsAllowed & Zack will be equal to 0. 0 used as bool is false.
WhoIsAllowed & Joe will be equal to 1. Non zeros used as bool is true.
WhoIsAllowed & Bill will be equal to 4. Non zeros used as bool is true.

No make it easier to figure out what you are doing, I would probalby code
it:
if ( WhoIsAllowed & Zack == 0 )
// Not Allowed

But again, read my prevoius response about why Iwouldn't use enums for htis
typeof thing anyway and code that I would use.

Travis
Guest
Posts: n/a

 09-15-2007
Thanks but this way of smacking readable labels with enums makes much
more sense. I don't have a ton users it's more like GOD, ADMIN, REG
and that's it.

Thank you everyone for your help.