簡體   English   中英

在 C# 中將正數轉換為負數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM