Преобразовать положительное число в отрицательное в С#

Вы можете преобразовать отрицательное число в положительное, как это:

int myInt = System.Math.Abs(-5);

Есть ли эквивалентный метод, чтобы сделать положительное число отрицательным?

Ответ 1

Как насчет

myInt = myInt * -1

Ответ 2

int myNegInt = System.Math.Abs(myNumber) * (-1);

Ответ 3

int negInt = -System.Math.Abs(myInt)

Ответ 4

Точно так же вы делаете что-либо еще отрицательным: поставьте перед ним отрицательный знак.

var positive = 6;
var negative = -positive;

Ответ 5

Примечание для всех, кто ответил

- Math.Abs(myInteger)

или

0 - Math.Abs(myInteger)

или

Math.Abs(myInteger) * -1

чтобы сохранить отрицательные числа отрицательными и положительно отрицательные.

Этот подход имеет единственный недостаток. Он не работает для всех целых чисел. Диапазон типа Int32 составляет от "-2 31" до "2 31 - 1." Это означает, что есть еще одно "отрицательное" число. Следовательно, Math.Abs(int.MinValue) выбрасывает OverflowException.

Правильный способ заключается в использовании условных операторов:

int neg = n < 0 ? n : -n;

Этот подход работает для целых чисел "все".

Ответ 6

Простой способ:

myInt *= -1;

Ответ 7

int negInt = 0 - myInt;

Или гарантировано быть отрицательным.

int negInt = -System.Math.Abs(someInt);

Ответ 8

Чтобы переключить знак целого, вы просто используете оператор sign:

myInt = -myInt;

Чтобы сделать его отрицательным, независимо от того, является ли исходное значение отрицательным или нет, сначала используйте метод Abs:

myInt = -Math.Abs(myInt);

Ответ 9

EDIT: это неверно для положительных входов... Я ошибся, забыв, что остальные биты в -x (значение 2s-Complement) являются "противоположными" их значениям в + x, а не одинаковыми. Таким образом, простое изменение бита знака НЕ ​​будет работать для положительных чисел.

Я оставлю это здесь для целей...

Или сложный способ (я думаю)...

int y = x | ~ Int.MaxValue;

cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111

так

~int.MaxValue is      1000 0000 0000 0000 0000 0000 0000 0000

и поэтому любой int32 Or'ed с этим помещает 1 в знаковый бит (делает его отрицательным) и оставляет все остальные биты одинаковыми...

EDIT: на самом деле, так как 1000 0000 0000 0000 0000 0000 0000 0000 фактически является значением Minvalue, это также должно работать:

   int y = x | int.MinValue; // or, to do it to itself,
   x |= int.MinValue;

Ответ 10

Просто для удовольствия:

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "-", positiveInt.ToString()));

Обновить: красота этого подхода заключается в том, что вы можете легко реорганизовать его в генератор исключений:

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));

Ответ 11

Просто для удовольствия:

int myInt = Math.Min(hisInt, -hisInt);

int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2))
            * Math.Abs(hisInt);

Ответ 12

Может быть, это?

int n;

.... some coding....

n = n<=0? n:0-n;

Ответ 13

long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);

Никто не сказал, что это должно быть какое-то конкретное отрицательное число.

Ответ 14

Несмотря на то, что я опоздал на вечеринку здесь, я собираюсь перехватить некоторые полезные трюки из моих аппаратных дней. Все они предполагают представление 2 комплиментов для подписанных чисел.

int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));

Ответ 15

Умножьте его на -1.

Ответ 16

int myInt = - System.Math.Abs(-5);

Ответ 17

Я использую myInt = -myInt;

Так просто и легко

Если вы хотите иметь только положительный

myInt = myInt>0 ? myInt : -myInt;

Ответ 18

Более простой способ a = -a сделает пользу

Ответ 19

Преобразование числа с положительного на отрицательное или отрицательное на положительное:

public static decimal Reverse(this decimal source)
{
     return source * decimal.MinusOne;
}

Ответ 20

X=*-1 может не работать на всех компиляторах... поскольку он читает "умножить" "SUBTRACT" 1 вместо НЕГАТИВНОГО Лучше alt X=(0-X), [WHICH DIFF FROM X-=X]

Ответ 21

Использовать двоичный код и удалить последний бит, который отвечает за отрицательный знак.

Или использовать двоичный код или добавить знак к типу данных.

Это солн может показаться абсурдным и неполным, но я могу гарантировать, что это самый быстрый метод.

Если вы не поэкспериментируете с тем, что я опубликовал, это сообщение может выглядеть дерьмо: D

Например, для int:

Int - 32-битный тип данных, поэтому последний бит (32-й) определяет знак.

И со значением, которое имеет 0 в 32-м месте и остальное 1. Оно преобразует отрицательное значение no в + ve.

Для противоположного или со значением с 1 в 32-м месте и остальным 0.