У меня есть целое число, для которого его абсолютное значение должно быть уменьшено на единицу.Уменьшить значение абсолютной величины?
Есть более короткий путь, чем это:
if(number > 0) number--; else if (number < 0) number++;
У меня есть целое число, для которого его абсолютное значение должно быть уменьшено на единицу.Уменьшить значение абсолютной величины?
Есть более короткий путь, чем это:
if(number > 0) number--; else if (number < 0) number++;
еще короче:
number -= Math.Sign(number);
Math.Sign
возвращает -1
, 0
или 1
в зависимости от знака указанного значения.
метод расширения
Так вы говорите, что справиться с этой ситуацией много было бы полезно, чтобы сделать этот метод расширения, чтобы лучше выразить свое намерение:
public static int ReduceFromAbsoluteValue(this int number, int reduceValue)
{
return number - Math.Sign(number) * reduceValue;
}
4.ReduceFromAbsoluteValue(1); // 3
-4.ReduceFromAbsoluteValue(1); // -3
0.ReduceFromAbsoluteValue(1); // 0
В качестве альтернативы называют этот AddToAbsoluteValue
и изменения чтобы добавить значение.
вот и все! В моем конкретном проекте я очень часто сталкиваюсь с этой ситуацией. Отличное решение! – Shimmy
Чуть короче:
number += number > 0 ? -1 : 1;
Если все, что вам нужно, это абсолютное значение:
Math.Abs(number) - 1
(Math.Abs (число) - 1) * Math.S IGN (номер)
Время взлома!
return number - (number >> 31) + (-number >> 31);
x >> 31
будет -1, если x < 0
, 0 в противном случае. Поэтому, если number < 0
будет вычитать -1 (добавить 1). Если number > 0
, то -number < 0
и добавляет -1, если number > 0
. Обе вещи равны нулю, когда number == 0
, поэтому он оставляет это в покое.
какой язык?/15char – bruchowski
Я использую C#, хотя этот код заключает, что я говорю о языке C-family. – Shimmy
'number - (число> 0) + (число <0)' – Nemo