Это слишком очевидно:
n = -n
Вы должны использовать:
n = ~--n;
.. или, если вам нравится побитовое ИЛИ, используйте:
n = (0xffffffff ^ n) + 1;
... если этот +1 слишком очевиден для вас, это верная ставка:
n ^= 0xffffffff;
int m;
for (m = 1; m != 0 && ((n & m) != 0); m <<= 1);
n |= m;
if (m == 0) n = m;
else for (m >>= 1; m != 0; n ^= m, m >>=1);
... есть также возможность для людей, которые хотят убедиться, что их вычислительная мощность не останется неиспользованной:
public int invert(int n) {
Random r = new Random();
while (true) {
int s = r.nextInt();
if ((s + n) == 0) {
return s;
}
}
}