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

时间:2009-08-28 16:23:53

标签: c#

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

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

是否存在使正数为负数的等效方法?

23 个答案:

答案 0 :(得分:405)

怎么样

myInt = myInt * -1

答案 1 :(得分:218)

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

答案 2 :(得分:127)

int negInt = -System.Math.Abs(myInt)

答案 3 :(得分:89)

你做出其他任何不利的方式:在它前面放一个负号。

var positive = 6;
var negative = -positive;

答案 4 :(得分:40)

请回复

的所有人注意
- Math.Abs(myInteger)

0 - Math.Abs(myInteger)

Math.Abs(myInteger) * -1

作为一种保持负数为负数并将正数变为负数的方法。

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

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

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

这种方法适用于“所有”整数。

答案 5 :(得分:19)

简单方法:

myInt *= -1;

答案 6 :(得分:16)

int negInt = 0 - myInt;

或保证是否定的。

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

答案 7 :(得分:11)

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

myInt = -myInt;

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

myInt = -Math.Abs(myInt);

答案 8 :(得分:6)

编辑:对于正输入这是错误的...我错误地忘记了-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 Oreded将在符号位中加1(使其为负),并使所有其他位保持不变...

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

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

答案 9 :(得分:6)

只是为了更多的乐趣:

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);

答案 10 :(得分:5)

虽然我在这里参加聚会的时间已经很晚了,但是我会在硬件时代带来一些有用的技巧。所有这些都假定2是对签名数字的赞美表示。

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

答案 11 :(得分:5)

只是为了好玩:

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

更新:这种方法的优点在于您可以轻松地将其重构为异常生成器:

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

答案 12 :(得分:4)

也许这个?

int n;

.... some coding....

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

答案 13 :(得分:4)

long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);

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

答案 14 :(得分:3)

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

答案 15 :(得分:3)

我使用myInt = -myInt;

如此简单易行

如果你想只有正面

myInt = myInt>0 ? myInt : -myInt;

答案 16 :(得分:2)

乘以-1。

答案 17 :(得分:1)

如前所述,仅乘以-1并不酷,就像int.MinValue * -1 == int.MinValue

这确实取决于您的应用程序,但是对于我的(反转操纵杆轴),我想确保仍然可以达到所有极限,并保持尽可能高的保真度。
为此,我映射了Max <-> Min,并且中间的所有内容都得到了* -1
使用这种技术,反转时无法访问-32767。

private static int Invert(int value) { if (value == int.MaxValue) return int.MinValue; if (value == int.MinValue) return int.MaxValue; return value * -1; }

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

我想分享的东西。

public decimal NumberReevaluate(decimal number, bool isPositive)
{
    var tempNumber = System.Math.Abs(number);
    return isPositive ? tempNumber : -tempNumber;
}

答案 21 :(得分:-2)

X=*-1可能不适用于所有编译器...因为它读取'乘法''SUBTRACT'1而不是NEGATIVE 更好的alt是X=(0-X),[这是来自X-=X的距离]

答案 22 :(得分:-2)

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

或使用二进制或将符号添加到数据类型。

这种解决方案可能听起来很荒谬和不完整,但我可以保证这是最快的方法。

如果你没有试验我发布的内容,那么这篇文章可能看起来很糟糕:D

例如对于int:

Int是32位数据类型,因此最后一位(第32位)确定符号。

并且值为32位且休息时为1.它会将负数no转换为+ ve。

正好相反或者是第32位为1且休息为0的值。