[英]Convert a positive number to negative in 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
類型的范圍是從“-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);
我使用myInt = -myInt;
如此簡單易行
如果你只想擁有積極的
myInt = myInt>0 ? myInt : -myInt;
編輯:這對於正輸入是錯誤的......我錯誤地忘記了 -x 中的其余位(2s-補碼值)是它們在 +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 實際上是 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);
即使我在這里參加派對已經很晚了,我還是會從我的硬件時代獲得一些有用的技巧。 所有這些都假設有符號數的 2 的恭維表示。
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
只是為了好玩:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
更新:這種方法的美妙之處在於您可以輕松地將其重構為異常生成器:
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
也許這個?
int n;
.... some coding....
n = n<=0? n:0-n;
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
沒有人說它必須是任何特定的負數。
int myInt = - System.Math.Abs(-5);
乘以-1。
將數字從正數轉換為負數,或將數從負數轉換為正數:
public static decimal Reverse(this decimal source)
{
return source * decimal.MinusOne;
}
如前所述,僅乘以 -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;
}
只是我想分享的東西。
public decimal NumberReevaluate(decimal number, bool isPositive)
{
var tempNumber = System.Math.Abs(number);
return isPositive ? tempNumber : -tempNumber;
}
使用二進制和刪除負責負號的最后一位。
或者使用 binary or 向數據類型添加符號。
這個解決方案可能聽起來很荒謬和不完整,但我可以保證這是最快的方法。
如果您不嘗試我發布的內容,這篇文章可能看起來很糟糕:D
例如對於 int:
Int 是 32 位數據類型,所以最后一位(第 32 位)決定了符號。
並且在第 32 位為 0,其余為 1 的值。它將負數轉換為 +ve。
正好相反,或者值在第 32 位為 1,其余為 0。
X=*-1
可能不適用於所有編譯器...因為它讀取的是“乘法”“減法”1 而不是 NEGATIVE 更好的 alt 是X=(0-X)
,[WHICH IS DIFF FROM X-=X
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.