2017-08-16 48 views
2

我怎樣才能使整數溢出? 是否有可能在C#中捕獲溢出異常?爲什麼我可以繞過c中的int限制#

的C#代碼我使用:

int overflow = 1; 

for (int i = 0; i < 31; i++) { 
    overflow = overflow * 2; 
    Console.WriteLine(overflow); 
} 

該計劃將繼續正常計數,當我通過一個(甚至多次)提高整數值:

for (int j = 0; j < 10; j++) { 
    overflow++; 
    Console.WriteLine(overflow); 
} 

但我當繼續乘以2,它總是以零迴應。

這是怎麼發生的?

+1

「不應該的Windows防止這種情況?」是什麼讓你認爲Windows應該有這個責任? –

回答

3

默認情況下,非常量表達式在運行時不會檢查溢出,也不會引發溢出異常。

溢出檢查可以通過編譯器選項,環境配置或用戶檢查關鍵字啓用。 檢查關鍵字用於顯式啓用整型算術運算和轉換的溢出檢查。

這裏與覈對關鍵詞巫婆你的代碼拋出溢出異常: 「不應該的Windows防止這種」

checked 
{ 
    int overflow = 1; 

    for (int i = 0; i < 31; i++) 
    { 
     overflow = overflow * 2; 
     Console.WriteLine(overflow); 
    } 
} 

checked (c# Reference)

相關問題