Thanks. The analogy to the decimal system was a big help in getting me to understand the principle.
On Wed, 2007-09-19 at 09:47 -0400, taserian wrote: > On 9/19/07, Boykie Mackay <[EMAIL PROTECTED]> wrote: > Hi guys, > > I have come across a bit of code to find if a group of numbers > is odd or > even.The code snippet is shown below: > > if not n&1: > return false > > The above should return false for all even numbers,numbers > being > represented by n.I have tried to wrap my head around the 'not > n&1' but > I'm failing to understand what's going on.Could someone please > explain > the statement. > > I'll respond more from a general programming point of view than as a > Python expert (far from it!). > > You can always tell if a regular number is divisible by 10, by just > looking at the last digit; if it's a zero, it is, and if it's anything > else, it isn't. That's a property of the decimal (base 10) system. > > The above snippet is taking advantage of a similar property of binary > numbers, which are base 2. What the above snippet is doing is checking > to see if that last digit is a 0 or not (asking "not n&1" is > equivalent to asking "n&0", since that digit can only be a 0 or 1). > Since binary numbers are base 2, any binary number that ends in a 0 is > divisible by 2, analogous to the decimal number example above. > > The technique being used to determine the value of the last digit is a > bitwise-AND. It compares the binary digits in the representation of n > with the binary digits in the representation of 1 on a one-to-one > positional arrangement. If either number has a zero in a certain > position, the result will have a zero in that position as well; if > both numbers have a 1 in that position, the result will have a 1. > > As an example, I'll represent 4 as a binary number: > > 100 (4 in binary) > 001 (1 in binary) > --------- > 000 (Result of bitwise-AND) > > and now using 5 as our input: > > 101 (5 in binary) > 001 (1 in binary) > -------- > 001 (Result of bitwise-AND) > > Since 1 represented in binary is all zeroes except for the last digit, > the only way to get anything different from 000 as a result is for the > last digit to be 1. > > Hopefully this didn't confuse you anymore. Experts, feel free to chime > in. > > Tony R. > > > > > > > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor