2012-03-28 28 views
-1

簡單的代碼確實是:來自異常的負整數是否表示不僅僅是一個數字?

int number = int.MaxValue; 
    number = number+1; 
Console.WriteLine(number); 

問題:

1)有應OverflowException異常。沒有。這是爲什麼?

2)是否數量-2147483648表示講講:

  • )有多少個字節是超出極限尺寸?

  • )如果我看到-2147483648,我怎麼知道(如果沒有例外) - 如果這個數字來自異常? - 我必須用Try Catch包裝它嗎?

p.s.當我寫道:

int number = int.MinValue; 
    number = number-1; 
Console.WriteLine(--number); 

我得到了:2147483647(仍然不例外)。

+0

@downVoter ....任何原因? – 2012-03-28 20:37:49

回答

7

應該有overflowException。沒有。這是爲什麼?

默認情況下,C#不會執行溢出檢查。可以使用checked關鍵字

對於你的問題的第二部分使之爲一個整體組件(在命令行中VS生成選項卡,或/checked+的「高級」位)或對一個塊/表達,-2147483648只是int.MinValue - 帶符號整數這樣做,從非常大的正數滾到非常大的負數。

例如,如果你使用sbyte(該符號字節型):

sbyte number = 127; // sbyte.MaxValue 
number++; 
Console.WriteLine(number); // Prints -128 

這裏沒有什麼有趣的事情 - 它只是正常2s complement溢出。

或者使用byte(簽名)

byte number = 255; // byte.MaxValue 
number++; 
Console.WriteLine(number); // Prints 0 
+0

是否表示:有多少字節超出限制大小? – 2012-03-28 20:19:25

+0

@RoyiNamir:正在爲此編輯 - 不,它並沒有指出任何異常。這只是溢出的結果。 – 2012-03-28 20:21:06

+1

@RoyiNamir:Gah,對不起 - 字節在C#中未簽名。你需要sbyte。將編輯。 – 2012-03-28 20:24:03

1

把它包在checked塊得到一個例外。算術溢出默認是未選中的。

1

是否數量-2147483648指示講講:

它的最小值。當你溢出時,你會換行,所以maxValue+1 == MinValue,MaxValue + 2 == MinValue + 1等 相同的邏輯適用於另一個方向; MinValue - 1 == MaxValue

1

int具有最小值和最大值。如果您溢出的最大值,它只是循環到最小值。

實施例:

INT不能有從-10號至10 INT I = 8; // 8 i ++; // 9 i ++; // 10 i ++; // -10 i ++; // -9 i - = 2; // 10 i + = 10; // -1

要獲得溢出異常,請使用check塊,因爲默認情況下它未被選中。

checekd 
{ 
    int i = int.MaxValue; 
    i++; // throws 
} 
相關問題