x&y is a long when either x or y is a long. When it could/should be only when both are long.
x&1 is a long whenever x is. Despite the fact that the numerical answer is either 0 or 1.
I’m not saying this is wrong, just… ugly.
Roll on Py3K.