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

142 c#

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

int myInt = System.Math.Abs(-5);
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使正数为负数?

bry*_*ook 420

怎么样

myInt = myInt * -1
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案很棒,因为它也可以将负转换为正!天才! (50认同)
  • 我的印象是你可以简单地在任何东西前面加上一个" - "来否定它...... - 这就是myInt中价值的负面影响...... -ABS(myInt)将是一个非常消极的. (19认同)
  • 怎么样'myInt = - Myint`? (12认同)
  • 甚至更短的`myInt*= - 1`? (8认同)

Jim*_*m W 226

int myNegInt = System.Math.Abs(myNumber) * (-1);
Run Code Online (Sandbox Code Playgroud)

  • +1记住,如果它已经是负面的,你会产生相反的效果.无论myNumber是正数还是负数,您的答案都是唯一一个总给出负数的答案. (28认同)
  • 30票?问题已经很简单了.这个过于复杂的答案(-System.Math.Abs​​(myNumber)也会这样做)得到30票? (6认同)
  • @rstevens每个人都在合作试图表明这个答案比接受的答案更正确.另外, - vs*-1绝对不是"过于复杂". (4认同)
  • 我喜欢这个答案比-System.Math.Abs​​更好,因为它一目了然地发生了什么......我觉得在声明面前错过" - "会更容易一些. (4认同)

JDu*_*ley 130

int negInt = -System.Math.Abs(myInt)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个技巧,因为它依赖于副作用,而不是主要影响.一元减去的主要影响是否定.乘法的主要影响是乘以.碰巧乘以-1否定.那更清楚了吗? (38认同)
  • 是的,因为否定是目标,所以一元减号是正确的运算符.另一方面,乘以负数只是否定一个值的技巧. (11认同)
  • @StevenSudit不,不比*-1好.乘以-1不是"技巧",它是将数字变为负数的数学方法.--Number只是-1*数字的简写.此外,使用Abs来保持数字为负数是一种过度杀伤力.`myInt <0?myInt:-myInt;`好多了.仅仅因为 - 运算符是正确的-1*数字加上重载功能的简写,不会使*( - 1)成为一种技巧. (5认同)

Joe*_*ite 91

你做出其他任何负面的方式都是这样的:在它前面放一个负号.

var positive = 6;
var negative = -positive;
Run Code Online (Sandbox Code Playgroud)

  • 每个人都忘记了一元减号. (7认同)
  • 我脑海中浮现的问题是,在性能水平上什么更好?变量前面的减号还是乘以-1? (2认同)

Meh*_*ari 40

回复的每个人都会注意到

- Math.Abs(myInteger)
Run Code Online (Sandbox Code Playgroud)

要么

0 - Math.Abs(myInteger)
Run Code Online (Sandbox Code Playgroud)

要么

Math.Abs(myInteger) * -1
Run Code Online (Sandbox Code Playgroud)

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

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

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

int neg = n < 0 ? n : -n;
Run Code Online (Sandbox Code Playgroud)

这种方法适用于"所有"整数.


dri*_*iis 20

简单的方法:

myInt *= -1;
Run Code Online (Sandbox Code Playgroud)

  • 即将发布相同的,每个人都应该表现出*=一些爱:-) (2认同)

tj1*_*111 16

int negInt = 0 - myInt;
Run Code Online (Sandbox Code Playgroud)

或者保证是负面的.

int negInt = -System.Math.Abs(someInt);
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 11

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

myInt = -myInt;
Run Code Online (Sandbox Code Playgroud)

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

myInt = -Math.Abs(myInt);
Run Code Online (Sandbox Code Playgroud)


Cha*_*ana 6

编辑:对于正输入这是错误的...我错误地忘记了-x(2s-Complement值)中的其余位与+ x中的值的"相反",不一样.因此,仅更改符号位将不适用于正数.

我会留在这里为了目的......

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

int y = x | 〜int.MaxValue;

cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
Run Code Online (Sandbox Code Playgroud)

所以

~int.MaxValue is      1000 0000 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)

因此任何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;
Run Code Online (Sandbox Code Playgroud)


Mik*_*vey 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);
Run Code Online (Sandbox Code Playgroud)

  • 风险太大,恕我直言.如果圆的定义发生变化怎么办? (2认同)

Mus*_*sis 5

纯娱乐:

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "-", positiveInt.ToString()));
Run Code Online (Sandbox Code Playgroud)

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

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
Run Code Online (Sandbox Code Playgroud)


dav*_*dmx 5

尽管我在这里参加聚会的时间已经很晚了,但我还是会从我的硬件时代开始尝试一些有用的技巧.所有这些都假设2对有符号数字的恭维表示.

int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
Run Code Online (Sandbox Code Playgroud)


CMS*_*CMS 5

我用 myInt = -myInt;

如此简单容易

如果你只想拥有积极的一面

myInt = myInt>0 ? myInt : -myInt;
Run Code Online (Sandbox Code Playgroud)