C#でint型の変数をオーバーフローさせるとどうなる?

C# コンピュータ
C#

int型の変数に最大値をセットし1加算するとどうなるでしょうか?

試してみます。

Console.WriteLine("Min:{0} Max:{1}", int.MinValue, int.MaxValue);

int a = int.MaxValue;
a++;
Console.WriteLine("a:{0}", a);

結果

Min:-2147483648 Max:2147483647
a:-2147483648

例外が発生するかと思いましたが、最小値になりました。

uint型でも試してみます。

Console.WriteLine("Min:{0} Max:{1}", uint.MinValue, uint.MaxValue);

uint a = uint.MaxValue;
a++;
Console.WriteLine("a:{0}", a);

結果

Min:0 Max:4294967295
a:0

intと同様に最小値になっています。

とあるプログラムで実行中カウントアップし続ける変数があり、オーバーフローしないように最大値になったら最小値をセットするコードを書こうと思い確認してみたところ不要であることを知りました。

コメント