"Christos TZOTZIOY Georgiou" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > On 21 Feb 2005 06:48:19 -0500, rumours say that Dan Sommers > <[EMAIL PROTECTED]> >>for c in range( 128 ): >> even_odd = 0 >> print '%3d' % c, >> while c: >> c &= c - 1 >> even_odd = not even_odd >> print int( even_odd ) > > Just for the sake of people who haven't messed with bit manipulation in C > or > assembly, the effect of > c &= c - 1 > is to reset the rightmost (less significant) '1' bit of a number (ie > change it > to '0').
Cute. I tried it a few times until I saw why it works. But it is also dangerous (within a loop like the above) in a language like current Python (and unlike C/assembler) in which the binary representation of -1 is effectively a left infinite string of '1's: ...1111111111 Terry J. Reedy -- http://mail.python.org/mailman/listinfo/python-list