簡體   English   中英

為什么Int32.MinValue - 1返回Int32.MaxValue?

[英]Why does Int32.MinValue - 1 return Int32.MaxValue?

當我執行以下代碼時,我(對我來說)有一些意想不到的行為。

int i = Int32.MinValue;
i--;
if (i == Int32.MaxValue)
{
    Console.WriteLine("i == Int32.MaxValue");
}
i++;
if (i == Int32.MinValue)
{
    Console.WriteLine("i == Int32.MinValue");
}

為什么Int32.MinValue上的-1不會拋出異常?

由於下溢值,所以值環繞。

如果要拋出溢出/下溢,則需要使用已checked部分。

checked關鍵字用於顯式啟用整數類算術運算和轉換的溢出檢查。

來自MSDN:

發生整數溢出時,會發生什么取決於執行上下文,可以檢查或取消選中。 在已檢查的上下文中,拋出了OverflowException。 在未經檢查的上下文中,結果的最高有效位被丟棄並繼續執行。 因此,C#為您提供了處理或忽略溢出的選擇。

鏈接到MSDN

與C一樣,C#實際上不會執行上溢/下溢檢查,除非明確寫入/告知這樣做。 因此,沒有問題從100...000減去1並得到011...111

int是二進制補碼二進制數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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