[Tutor] Strange operator

Chad Crabtree flaxeater at yahoo.com
Fri Nov 5 03:17:58 CET 2004


So if I understand this correctly it's similar to the chmod 777 
directive, using binary representation to mean (111)  I understood
this 
system already but that is really neat.  So to extrapolate

LEFT=1
RIGHT=2
TOP=4
BOTTOM=8
WILLYWONKA=16

would be the proper progression of options.  then to see if a option
was 
set I would do it like this.

if flag>=WILLYWONKA:
    print "Go to the Factory"

Is that So?

So this is like a really really really compact switch statement?


Danny Yoo wrote:

> Hi Chad,
>
>
>Underneath the surface, integers in Python are stored as a series of
bits.
>For example, the following sequence of bits:
>
>    100010100100
>
>can stand for the integer 2212:
>
>###
>  
>
>>>>int('100010100100', 2)
>>>>        
>>>>
>2212
>###
>
>
>So that's a traditional interpretation of a series of bits.  But
there's
>another interpretation we can use: a series of bits may record a
bunch of
>yes/no answers.  In that sense,
>
>    100010100100
>
>might mean:
>
>    [Yes, No, No, No, Yes, No, Yes, No, No, Yes, No, No]
>
>
>
>A bitwise OR allows us to turn any one of those bits from No to Yes.
 For
>example, perhaps we may like to turn on the very last bit there.  We
can
>do this by saying:
>
>###
>  
>
>>>>2212 | 1
>>>>        
>>>>
>2213
>###
>
>
>We should be careful not to interpret the result as an addition:
it's not.
>We're actually turning on the very last bit, which we can see if we
try
>doing another OR:
>
>###
>  
>
>>>>2213 | 1
>>>>        
>>>>
>2213
>###
>
>That 'bit' is on already, so doing an OR again doesn't affect the
answer.
>There are other bitwise operators out there that act like toggle
switches;
>
>
>A bitwise representation of these yes/no choices is nice because
it's VERY
>compact.  A single integer can normally hold about 32 individual
bits.
>(32 bit computing!)  And to be able to represent 32 separate
'yes/no'
>flags in a single integer is a very neat thing.
>
>
>We may have run into this sort of thing before: the re.compile()
function
>can take in an optional set of flags.  For example, we might say
something
>like:
>
>    re.compile("hello world", re.VERBOSE | re.IGNORECASE)
>
>Without knowing about bits, that statement should actually look
weird: how
>are we giving two particular bits of information in a single
argument?
>
>
>We can look at what that OR is producing:
>
>###
>  
>
>>>>re.VERBOSE
>>>>        
>>>>
>64
>  
>
>>>>re.IGNORECASE
>>>>        
>>>>
>2
>  
>
>>>>re.VERBOSE | re.IGNORECASE
>>>>        
>>>>
>66
>###
>
>
>It's producing a single integer, but that integer is made up of
bits! So
>we're really saying that two particular bits should be set to "Yes".
>
>###
>  
>
>>>>int('1000010', 2)
>>>>        
>>>>
>66
>###
>
>
>
>Does this make sense so far?  A lot of this bit-fiddling just has to
deal
>with using a very efficient representation for a collection of
choices.
>
>
>Hope this helps!
>
>
>
>  
>



		
__________________________________ 
Do you Yahoo!? 
Check out the new Yahoo! Front Page. 
www.yahoo.com 
 



More information about the Tutor mailing list