So, I change your “n < 0" check to "n<1<<63" and now it's perfect. (I removed those silly spaces, they just aided readability, what a crazy idea… as if anybody will ever read it!)

def signed(n):

return n if n <1<<63 else n – [i for i in (2**j if n/(2**(j-1)) else iter(()).next() for j in xrange(2**31-1))][-1]