http://dalmore.blog7.fc2.com/blog-entry-43.html
c#では整数型のプラス最大値にを加算しても例外が発生せず、符号なし型のように加算されて利用されるときには2の補数でマイナスとして取得されてしまう。
いままで知らなかったのが恐ろしすぎる挙動。
int num = int.MaxValue; Console.WriteLine(Convert.ToString(num, 10)); // 2147483647 Console.WriteLine(Convert.ToString(num, 2)); // 0b01111111111111111111111111111111 num = num + 1; Console.WriteLine(Convert.ToString(num, 10)); // -2147483648 Console.WriteLine(Convert.ToString(num, 2)); // 0b10000000000000000000000000000000
以下のようにcheckedブロックで囲むと、OverflowExceptionが発生する。
ちなみに逆の動きをするuncheckedブロックもある。
あと、VB.NETでは常にOverflowExceptionが発生する挙動らしい。
checked { num = num + 1; }