递增保留int符号的绝对值



对于incdec保持符号(+ -)的int的绝对值,最短的方法是什么?

int a = 5;
int b = -7;
// increment abs of both
// a -> 6
// b -> -8
// incrementing 0 wasn't interesting me, I guess it can stay 0

(我相信这并没有那么难,但我可能会得到一些代码行。但我想知道我是否可以制作出非常短的1行代码?)。我还删除了C#标签,因为这可能对所有类型的语言都很有趣

IF 0应保留为0:由于Math.Sign返回+1、-1或0,因此可以执行:

a += Math.Sign(a);

我认为在线比较比abs调用便宜:

int res = a + (a >= 0 ? 1:-1)

这假设0是一个正数。

如果你想让1成为答案,如果你给它0,这里有一种方法:

a = Math.Sign(a) * (Math.Abs(a) + 1)

由于问题中删除了C#标记,我想提供以下(C)答案:

#define absInc(a) ((a<0)?(--a):(++a))

一旦你把它放在你的头中,你就可以在你的代码中做以下事情(经过测试,有效):

int a = -4;
absInc(a);
printf("a is now %dn", a);

结果:-5

我重新发布了这篇文章,因为我最初的(类似的)答案得到了很多反对票,因为C#中不存在这种类型的构造。我没有注意标签。。。

最新更新