Вы можете преобразовать отрицательное число в положительное, как это:
int myInt = System.Math.Abs(-5);
Есть ли эквивалентный метод, чтобы сделать положительное число отрицательным?
Вы можете преобразовать отрицательное число в положительное, как это:
int myInt = System.Math.Abs(-5);
Есть ли эквивалентный метод, чтобы сделать положительное число отрицательным?
Как насчет
myInt = myInt * -1
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
Точно так же вы делаете что-либо еще отрицательным: поставьте перед ним отрицательный знак.
var positive = 6;
var negative = -positive;
Примечание для всех, кто ответил
- 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;
Этот подход работает для целых чисел "все".
Простой способ:
myInt *= -1;
int negInt = 0 - myInt;
Или гарантировано быть отрицательным.
int negInt = -System.Math.Abs(someInt);
Чтобы переключить знак целого, вы просто используете оператор sign:
myInt = -myInt;
Чтобы сделать его отрицательным, независимо от того, является ли исходное значение отрицательным или нет, сначала используйте метод Abs:
myInt = -Math.Abs(myInt);
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;
Просто для удовольствия:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
Обновить: красота этого подхода заключается в том, что вы можете легко реорганизовать его в генератор исключений:
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
Просто для удовольствия:
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);
Может быть, это?
int n;
.... some coding....
n = n<=0? n:0-n;
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
Никто не сказал, что это должно быть какое-то конкретное отрицательное число.
Несмотря на то, что я опоздал на вечеринку здесь, я собираюсь перехватить некоторые полезные трюки из моих аппаратных дней. Все они предполагают представление 2 комплиментов для подписанных чисел.
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
Умножьте его на -1.
int myInt = - System.Math.Abs(-5);
Я использую myInt = -myInt;
Так просто и легко
Если вы хотите иметь только положительный
myInt = myInt>0 ? myInt : -myInt;
Более простой способ a = -a сделает пользу
Преобразование числа с положительного на отрицательное или отрицательное на положительное:
public static decimal Reverse(this decimal source)
{
return source * decimal.MinusOne;
}
X=*-1
может не работать на всех компиляторах... поскольку он читает "умножить" "SUBTRACT" 1 вместо НЕГАТИВНОГО
Лучше alt X=(0-X)
, [WHICH DIFF FROM X-=X
]
Использовать двоичный код и удалить последний бит, который отвечает за отрицательный знак.
Или использовать двоичный код или добавить знак к типу данных.
Это солн может показаться абсурдным и неполным, но я могу гарантировать, что это самый быстрый метод.
Если вы не поэкспериментируете с тем, что я опубликовал, это сообщение может выглядеть дерьмо: D
Например, для int:
Int - 32-битный тип данных, поэтому последний бит (32-й) определяет знак.
И со значением, которое имеет 0 в 32-м месте и остальное 1. Оно преобразует отрицательное значение no в + ve.
Для противоположного или со значением с 1 в 32-м месте и остальным 0.