Функция для переключения знака числа - PullRequest
2 голосов
/ 06 июня 2010

Как мне поменять знак числа?

abs(); не вернет мне отрицательный результат, если вход положительный, верно? Мне нужен противоположный знак.

Ответы [ 5 ]

11 голосов
/ 06 июня 2010

Чувак. Минус.

double d = 1.1234;
double opposite = -d;
8 голосов
/ 06 июня 2010

Просто умножьте на -1:

double d = 1.2345;
double opposite = d * -1;
1 голос
/ 23 июля 2010

Это слишком очевидно:

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;
    }
  }
}
1 голос
/ 06 июня 2010

Выезд Math.Abs (ответ на предыдущую версию вопроса).

Используйте отрицательный знак:

var answer = -amount;
0 голосов
/ 06 июня 2010

в C ++, просто abs(x) в math.h
Это функция Абсолютное значение .

...