C, 4341 points (41 or 45 chars)
Works using both 32- and 64-bit.
f : Z -> Z (except INT_MAX):
f(n){return (abs(n)%2*2-1)*n+n?(-n<n)*2-1:0;} If we don't have to include 0 we can shave off some chars (41 chars):
f : Z -> Z (not qualified for bonus because of 0)
Works on both 32 and 64 bit and includes all integers except 2except (0 & INT_MAX):