在C#中将正数转换为负数

您可以将负数转换为正数,如下所示:

int myInt = System.Math.Abs(-5); 

有一个等价的方法来使正数负面吗?

怎么样

 myInt = myInt * -1 
 int myNegInt = System.Math.Abs(myNumber) * (-1); 
 int negInt = -System.Math.Abs(myInt) 

同样的,你做任何事情都是消极的:在它前面放一个负号。

 var positive = 6; var negative = -positive; 

请注意所有回复的人

 - Math.Abs(myInteger) 

要么

 0 - Math.Abs(myInteger) 

要么

 Math.Abs(myInteger) * -1 

作为一种保持负数的负面方式,并转正面负面的方式。

这种方法有一个缺陷。 它不适用于所有整数。 Int32types的范围是从“-2 31 ”到“2 31 – 1”。 这意味着还有一个“负面”的数字。 因此, Math.Abs(int.MinValue)抛出一个OverflowException

正确的方法是使用条件语句:

 int neg = n < 0 ? n : -n; 

这种方法适用于“全部”整数。

简单的方法:

 myInt *= -1; 
 int negInt = 0 - myInt; 

或保证是负面的。

 int negInt = -System.Math.Abs(someInt); 

要切换整数的符号,只需使用符号运算符:

 myInt = -myInt; 

无论原始值是否定的,要使其为负数,首先使用Abs方法:

 myInt = -Math.Abs(myInt); 

编辑:这是错误的积极的投入…我犯了一个错误,忘记-x(2s-Complement值)中的其余位是他们在+ x的价值“相反”,不一样。 所以简单地改变符号位将不适用于正数。

我会在这里留下来的目的…

或者棘手的方式(我认为)…

int y = x | 〜int.MaxValue;

 cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111 

所以

 ~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000 

因此任何int32或者将会在符号位置1(使其为负值),并保留所有其他位相同的…

编辑:实际上,由于1000 0000 0000 0000 0000 0000 0000 0000实际上是Minvalue,这也应该工作:

  int y = x | int.MinValue; // or, to do it to itself, x |= int.MinValue; 

只是为了更好玩:

 int myInt = Math.Min(hisInt, -hisInt); int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2)) * Math.Abs(hisInt); 

只是为了好玩:

 int negativeInt = int.Parse(String.Format("{0}{1}", "-", positiveInt.ToString())); 

更新 :这种方法的美妙之处在于,您可以轻松地将其重构为exception生成器:

 int negativeInt = int.Parse(String.Format("{0}{1}", "thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString())); 
 long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1); 

没有人说它必须是任何特定的负数。

尽pipe我在这里参加派对的时间已经晚了,但是我还是会用硬件时间里的一些有用的技巧加以注意。 所有这些都假设2是有符号数的恭维表示。

 int negate = ~i+1; int positiveMagnitude = (i ^ (i>>31)) - (i>>31); int negativeMagnitude = (i>>31) - (i ^ (i>>31)); 

也许这个?

 int n; .... some coding.... n = n<=0? n:0-n; 

乘以-1。

 int myInt = - System.Math.Abs(-5); 

我使用myInt = -myInt;

如此简单和容易

如果你想只有积极的

 myInt = myInt>0 ? myInt : -myInt; 

更简单的方法a = -a会帮忙

将数字从正数转换为负数,或将负数转换为正数:

 public static decimal Reverse(this decimal source) { return source * decimal.MinusOne; } 

X=*-1可能不适用于所有的编译器…因为它读取的是一个“相乘”'SUBTRACT'1而不是NEGATIVE更好的是X=(0-X) ,[这是与X-=X ]

使用二进制,并删除负责负号的最后一位。

或者使用二进制或将符号添加到数据types。

这个soln听起来可能荒谬和不完整,但我可以保证这是最快的方法。

如果你不试试我发布的post,可能会看起来很糟糕:D

例如对于int:

Int是32位数据types,所以最后一位(第32位)确定符号。

并且在32位中有一个值为0,其余为1.它会将负号转换为+ ve。

正好相反,或者在32位中有1位,其余为0。