[英]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不會拋出異常?
來自MSDN:
發生整數溢出時,會發生什么取決於執行上下文,可以檢查或取消選中。 在已檢查的上下文中,拋出了OverflowException。 在未經檢查的上下文中,結果的最高有效位被丟棄並繼續執行。 因此,C#為您提供了處理或忽略溢出的選擇。
與C一樣,C#實際上不會執行上溢/下溢檢查,除非明確寫入/告知這樣做。 因此,沒有問題從100...000
減去1並得到011...111
。
int
是二進制補碼二進制數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.