c#では、checkedブロックに含めないとオーバーフロー例外が発生しない

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;
}