C, 38 points (42 chars)
-----
`f : Z -> Z`
Works on both 32 and 64 bit and includes all integers except 4 (`0`, `INT_MAX`, `INT_MIN` & `INT_MIN+1`):
f(n){return ((abs(n)%2)*2-1)*n+(-n<n)*2-1;}
----
This function works by dividing all integers into 4 groups based on their sign and parity.
So we have the 4 different combinations:
+ even, + odd, - even, - odd
As we need to switch the sign of the number, but not the parity after two passes, we get two different possible sequences:
+ even -> - odd -> - even -> + odd -\
^-------------------------------------/
+ even -> + odd -> - even -> - odd -\
^-------------------------------------/
In this example I have chosen the second one.
First we need to map all even positive integers to odd positive integers. We do this by incrementing the number (you could also choose to decrement the number instead):
f1(n) = n + 1
We then need to map all odd positive integers to even negative integers. We need to make sure that `f2(f1(n)) = -n`:
f2(f1(n)) = -n
f2(n+1) = -n
f2(n) = -n + 1
Using the same methods we find `f3` and `f4`:
f3(n) = n - 1
f4(n) = -n - 1
To combine these functions into one single function, we observe that every time `n` is odd, we switch the sign of `n` and every time `n` is positive we increment by one and otherwise we decrement by one:
f1(n) = n + 1 (+ even)
f2(n) = -n + 1 (+ odd)
f2(n) = n - 1 (- even)
f4(n) = -n - 1 (- odd)
This can thus be rewritten as:
f(n) = parity(n) * n + sign(n)
where `parity(n)` returns `1` for even numbers and `-1` for odd numbers.