Cでは、整数の昇格を伴わないコンテキストで、符号なしの値が「ラッピング」抽象代数リングのメンバーとして動作するように指定されました(したがって、XおよびYについて、XYは一意の値を生成し、Yに追加されるとXを生成します) )、符号付き整数型は、計算が特定の範囲内にとどまると整数のように動作するように指定され、計算がそれを超えた場合は何でもできるようになりました。ただし、C#の数値セマンティクスはまったく異なります。チェックされた数値コンテキスト内の場合、符号付き型と符号なし型の両方は、計算が範囲内にあるOverflowException
場合は整数のように動作し、そうでない場合はスローします。チェックされていないコンテキストでは、両方とも代数リングのように動作します。
一般にInt32
、コンパクトなストレージまたはトランスポートのために物を梱包または開梱する必要がある場合よりも小さいデータ型を使用する価値があるのは唯一の時間です。5億の正数を格納する必要があり、それらがすべて0〜100の範囲にある場合、4つではなくそれぞれ1バイトを使用すると、1.5ギガバイトのストレージが節約されます。それは大きな節約です。ただし、コードの一部に合計数百の値を格納する必要がある場合、それぞれを4つではなく1バイトにすると、約600バイト節約できます。おそらく気にする価値はありません。
符号なしの型に関して、それらが本当に役立つのは、情報交換を実行するとき、または数字を断片に分割するときだけです。たとえば、96ビット整数で計算する必要がある場合、符号付き整数のグループよりも、3つの符号なし32ビット整数のグループで計算を実行する方がはるかに簡単です。そうでない場合、符号付き32ビットまたは64ビット値の範囲が不十分になる状況はあまり多くありませんが、同じサイズの符号なし値で十分です。