我有一个整数,需要将其绝对值减一。
是否有比此更短的方式:
if(number > 0) number--; else if (number < 0) number++;
答案 0 :(得分: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
并更改它以添加值。
答案 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(数字)