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

Reply via email to