C# デフォルトでは、定数式の値が対象の型の最大値を超えるとコンパイルエラーが発生します。
ターゲットのデータ型が非定数式のデータを収容できない場合、データは代入中に切り捨てられます。
class Program { static void Main(string[] args) { int n = int.MaxValue;//n=2147483647 n = n + 1; System.Console.WriteLine(n); } }
これは、以前はメモリ上の int.MaxValue が 32 ビットの 1 であり、1 を追加すると 32 ビットの 0 になったことで説明できます。このとき、0 は負の符号とみなされます。したがって、-2147483648 が取得されます。
上記のコードをチェックされたブロックに配置すると、System.OverflowException タイプが発生します。
class Program { static void Main(string[] args) { checked { int m = int.MaxValue; m = m + 1; System.Console.WriteLine(m); } } }
C# のチェックされたブロックに配置された変数は、実行時にオーバーフロー代入が発生した場合に例外を引き起こします。
unchecked は、整数の算術演算と変換のオーバーフロー チェックをキャンセルするために使用されます。
上記は C# の難しさの内容 (7) です: チェックが入っている場合とチェックされていない場合の詳細については、PHP 中国語 Web サイト (m.sbmmt.com) をご覧ください。