您可以像这样将负数转换为正数:
int myInt = System.Math.Abs(-5);
是否有使正数为负的等效方法?
您可以像这样将负数转换为正数:
int myInt = System.Math.Abs(-5);
是否有使正数为负的等效方法?
Answers:
怎么样
myInt = myInt * -1
myInt = - Myint呢?
myInt *= - 1?
myShort = (short) -myShort是必要的,因为short取反时会变成int。
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;好多了。仅仅因为-运算符是正确的-1 * Number加上简写能力的简写而已,所以*(-1)并不是一个技巧。
您将其他任何东西设为负面的方法也一样:在其前面放置一个负号。
var positive = 6;
var negative = -positive;
int myNegInt = System.Math.Abs(myNumber) * (-1);
请注意所有回应的人
- 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;
此方法适用于“所有”整数。
Abs)无法解决int.MinValue(假定int返回类型。)在这种情况下,抛出异常是完全可以的。但是,此特定问题的结果为“有效”,int.MinValue但如果您选择Abs路线,则会引发异常。
n是的-32768话-n也是-32768!此外int neg = n < 0 ? n : -n;,由于三元组之一绝对不执行任何操作,因此不可能在所有情况下都有效。
只是为了更多的乐趣:
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);
编辑:这对于正输入是错误的...我犯了一个错误,忘记了-x(2s-Complement值)中的其余位与它们在+ x中的值“相反”,而不是相同。因此,仅更改符号位将不适用于正数。
我将其留在这里出于目的...
还是棘手的方式(我认为)...
整数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 Or'ed配合使用的结果都将在符号位中放入1(使其变为负数),而所有其他位保持不变...
编辑:实际上,由于1000 0000 0000 0000 0000 0000 0000 0000 0000实际上是最小值,所以这也应该起作用:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number。1都是零和一。用的OR-ing它int.MinValue会导致10000000000000000000000000000001这不等于-1(全1)
即使我在这里参加聚会的时间很晚,我还是会从硬件的日子中汲取一些有用的技巧。所有这些均假定2为带符号数字的补语表示。
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
i == int.MinValue,则所有变量均为-2147483648
我用 myInt = -myInt;
如此简单容易
如果你只想拥有积极的一面
myInt = myInt>0 ? myInt : -myInt;
int.MaxValue是2147483647,您将溢出,甚至var i = int.MaxValue; i++;无法工作
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
没人说这必须是任何特定的负数。
乘以-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;
}
5不是-5,而是1/5。
X=*-1可能不适用于所有编译器...因为它读取的是“乘”的“ SUBTRACT” 1,而不是负数。更好的选择是X=(0-X),[WHICH IS DIFF FROM X-=X]