增加int保留符号的绝对值?

时间:2013-12-12 16:24:31

标签: binary int

inc dec 的最短路径是int 的绝对值,但保留符号({{1 }} +)?

-

(我确定它不是那么难,但我可能最终会得到一些代码。但我想知道我是否可以制作那么短的1-liner?)。我还删除了C#标签,因为这可能对各种语言都很有用。

4 个答案:

答案 0 :(得分:17)

IF 0应该保留为0:因为Math.Sign返回+1,-1或0,你可以这样做:

a += Math.Sign(a);

答案 1 :(得分:4)

如果你想要1作为答案,如果你喂它0,这是一种方式:

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

答案 2 :(得分:4)

我认为在线比较比绝对呼叫便宜:

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

这假设0是正数。

答案 3 :(得分:1)

由于C#标签已从问题中移除,我想提供这个(C)答案:

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

将其放入标题后,您可以在代码中执行以下操作(已测试,有效):

int a = -4;
absInc(a);
printf("a is now %d\n", a);

结果:-5

我重新发布了这个,因为我的原始(类似)答案得到了很多downvotes,因为这种类型的构造在C#中不存在。我没有注意标签......