#define ANIM_ISPLAYING 0x01
#define ANIM_LOOPANIM 0x02
#define ANIM_REVERSE 0x04
#define ANIM_RANDOM 0x08
// 1) How to check to see whether a certain bit is 1 or 0 in a variable.
if(m_ucFlags & ANIM_LOOPANIM)
// this tile loops
// 2) How to set a bit in a variable to 1 or 0.
m_ucFlags &= ANIM_REVERSE; // set the reverse bit
m_ucFlags &= ~ANIM_ISPLAYING; // un-set the isplaying bit
.. but i've seen tons of other things, and I'm all confused.
Someone care to help?
Thanks,
-- mattd
Edited by - mattd on July 28, 2001 6:12:58 AM
Using bits as flags
Argh! This seems so easy, but I just can't get it right. All i need to know is:
1) How to check to see whether a certain bit is 1 or 0 in a variable.
2) How to set a bit in a variable to 1 or 0.
That's it! As you can tell, I'm using a unsigned char in a struct to allow BOOL-type flags.
I thought the answers to these questions were...
to test a bit (Note: you don''t really need the "!= 0" bit):
To set a bit:
To un-set a bit:
So you had it all right, except for the setting of a bit.
War Worlds - A 3D Real-Time Strategy game in development.
|
To set a bit:
|
To un-set a bit:
|
So you had it all right, except for the setting of a bit.
War Worlds - A 3D Real-Time Strategy game in development.
what does 0x mean?
does it mean ur number system is binary? if so, y 1,2,4,8 instead of 1,2,3,4?
does it mean ur number system is binary? if so, y 1,2,4,8 instead of 1,2,3,4?
life is unfair, take advantage of it.UNMB2 - if the link doesn't work, try clicking it :)
oh, so how would u get a number to represent binary?
and if it''s hex, then y do ppl do 1,2,4,8 (in powers of 2)?
and if it''s hex, then y do ppl do 1,2,4,8 (in powers of 2)?
life is unfair, take advantage of it.UNMB2 - if the link doesn't work, try clicking it :)
Because you''re not setting a value, you''re setting individual flags. Flag one corresponds to 1. Flag two corresponds to 2. Flag 3 corresponds to 4. Flag 4 corresponds to 8. And so on. In Hex, after 0x08 you have 0x10 (16). Then 0x20 (32), 0x40 (64), etc...
People use hex because you can represent larger numbers with less digits, and since base-16 is closely tied to base-2 (16 being 2^4), it''s more intuitive to catch on to. Would you rather write 524288, or 0x80000?
And to answer your question about specifiying binary, you would put the letter ''b'' after the number. So int x = 1011b; would set x to 11 decimal.
And to answer your question about specifiying binary, you would put the letter ''b'' after the number. So int x = 1011b; would set x to 11 decimal.
quote:
Original post by Zipster
And to answer your question about specifiying binary, you would put the letter ''b'' after the number. So int x = 1011b; would set x to 11 decimal.
In MS assembler, yes. In C and C++, no. Unfortunately, there''s no way to do binary in C/C++. You can use octal--but that''s less intuitive than hex (IMHO).
Oh yes that''s right... I''ve been working on my assembly lately so that''s fresh in my mind. I wrote a little inline function to do it for me 
I know it uses a string and it isn''t the most speedy thing in the world, but it works, and I might work on a newer, faster one.

|
I know it uses a string and it isn''t the most speedy thing in the world, but it works, and I might work on a newer, faster one.
Oh wait, if we use macros, we can pull this off.
Then you can do:
And then q will be equal to 11.
Edited by - Zipster on August 1, 2001 3:13:06 PM
|
Then you can do:
|
And then q will be equal to 11.
Edited by - Zipster on August 1, 2001 3:13:06 PM
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement