在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
作为一种保持负数的负面方式,并转正面负面的方式。
这种方法有一个缺陷。 它不适用于所有整数。 Int32
types的范围是从“-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。