从绝对值减少一个?

时间:2014-10-06 02:16:33

标签: c# optimization mathematical-optimization

我有一个整数,需要将其绝对值减一。

是否有比此更短的方式:

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

4 个答案:

答案 0 :(得分:4)

更短:

number -= Math.Sign(number);

Math.Sign会返回-101,具体取决于指定值的符号。

扩展方法

既然你说你经常面对这种情况,那么将它作为一种扩展方法来更好地表达你的意图可能是有益的:

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并更改它以添加值。

答案 1 :(得分:2)

略短:

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

如果您只需要绝对值:

Math.Abs(number) - 1

答案 2 :(得分:2)

哈克时间!

return number - (number >> 31) + (-number >> 31);
如果x >> 31

x < 0将为-1,否则为0。因此,如果number < 0它将减去-1(加1)。如果是number > 0,那么-number < 0,如果number > 0,则会增加-1。 <{1}}时,这两件事都是零,所以只留下它。

答案 3 :(得分:0)

(Math.Abs​​(number) - 1)* Math.Sign(数字)