storing boolean flags in numbers

  • Thread starter Sebastian probst Eide
  • Start date
S

Sebastian probst Eide

I might sound completely dumb asking this question, but well, I'll risk
it anyway!

Some years ago I read about using a single number as a mechanism for
storing flags (on/off values) in a Java magazine.

By setting the bits in a number to either 0 or 1 you could store
enormous amounts of boolean values in a single number.

An example.

I have three flags:
Flag1
Flag2
Flag3

(The following byte sequences are written from the right)

Flag1 = true
Flag2 = false
Flag3 = false
gives:
001 => 1

Flag1 = false
Flag2 = true
Flag3 = true
gives:
110 => 6

Flag1 = true
Flag2 = false
Flag3 = true
gives:
101 => 5

In the magazine they used some sort of combination of AND and OR and XOR
and stuff like that to get the different values.
Would there be an easy way to do this in Ruby? How would one implement a
thing like this?
I basically just need a way to read the different values. I'll try to
extend it myself so I can read any given number of flags myself. Just
need to understand how to read and set the flags!

Best regards
Sebastian
 
S

Sebastian probst Eide

p 5[2]
Wow! This is great! But is there a way to set flags this way to?

Say I have:
flags = 0b010110010

checking flag 6 is easy enough
flags[6] => 0
But how could I easily set flag 6 to 1?
flags[6] = 1 doesn't work obviously...
 
R

Robert Klemme

Wow! This is great! But is there a way to set flags this way to?

Say I have:
flags = 0b010110010

checking flag 6 is easy enough
flags[6] => 0
But how could I easily set flag 6 to 1?
flags[6] = 1 doesn't work obviously...

Set and reset:

irb(main):001:0> flags = 0b010110010
=> 178
irb(main):002:0> flags[6]
=> 0
irb(main):003:0> flags |= 1 << 6
=> 242
irb(main):004:0> flags[6]
=> 1
irb(main):005:0> flags ^= flags[6] << 6
=> 178
irb(main):006:0> flags[6]
=> 0

See also http://raa.ruby-lang.org/project/bitset/

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top