2014-10-06 2 views
1

У меня есть целое число, для которого его абсолютное значение должно быть уменьшено на единицу.Уменьшить значение абсолютной величины?

Есть более короткий путь, чем это:

if(number > 0) number--; else if (number < 0) number++; 
+0

какой язык?/15char – bruchowski

+0

Я использую C#, хотя этот код заключает, что я говорю о языке C-family. – Shimmy

+2

'number - (число> 0) + (число <0)' – Nemo

ответ

4

еще короче:

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 и изменения чтобы добавить значение.

+0

вот и все! В моем конкретном проекте я очень часто сталкиваюсь с этой ситуацией. Отличное решение! – Shimmy

2

Чуть короче:

number += number > 0 ? -1 : 1;

Если все, что вам нужно, это абсолютное значение:

Math.Abs(number) - 1

+0

Упс, извините, забыл тройной. Но есть ли математический хак, только ради бонуса. – Shimmy

+0

Не знаю, о чем я знаю. – knrz

+2

Для любого, кто интересуется, это отличается от исходного кода для 'number == 0'. –

0

(Math.Abs ​​(число) - 1) * Math.S IGN (номер)

2

Время взлома!

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, поэтому он оставляет это в покое.

Смежные вопросы