Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 保整数符号的增量绝对值?_Binary_Int - Fatal编程技术网

Binary 保整数符号的增量绝对值?

Binary 保整数符号的增量绝对值?,binary,int,Binary,Int,到inc或dec的最短路径是什么?一个int的绝对值,但保留符号(+-) (我相信这并不难,但我可能会得到一些代码行。但我想知道我是否能做到非常简短,1行?)。我还删除了C#标记,因为这可能对所有类型的语言都很有趣。如果您希望在输入0时使用1作为答案,那么有一种方法: a = Math.Sign(a) * (Math.Abs(a) + 1) 我认为在线比较比abs电话便宜: int res = a + (a >= 0 ? 1:-1) 这假设0是一个正数。如果0应该保留为0:因为数学符号

incdec的最短路径是什么?一个
int
的绝对值,但保留符号(
+
-


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

如果您希望在输入0时使用1作为答案,那么有一种方法:

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

我认为在线比较比abs电话便宜:

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

这假设0是一个正数。

如果0应该保留为0:因为
数学符号
返回+1、-1或0,您可以执行以下操作:

a += Math.Sign(a);
由于C#标记已从问题中删除,我想提供以下(C)答案:

结果:
-5


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

0会发生什么?@mini me-你有两个非常好的答案-一个保留零,另一个增加它。你能消除歧义吗?轰。回答得很好,伙计。我喜欢这个,简洁明了。或者如果你只是想更新变量
a+=a>=0?1 : -1;
a += Math.Sign(a);
#define absInc(a) ((a<0)?(--a):(++a))
int a = -4;
absInc(a);
printf("a is now %d\n", a);