您可以将负数转换为正数,如下所示:
int myInt = System.Math.Abs(-5);
是否存在使正数为负数的等效方法?
答案 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)
我会留在这里为了目的......
或者狡猾的方式(我认为)......
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的值。