整数数値型 (C# リファレンス)
"整数数値型" は、整数値を表します。 すべての整数数値型は、値の型です。 また、単純型でもあり、リテラルを使用して初期化することができます。 すべての整数数値型では、算術、ビット論理、比較、等値演算子がサポートされています。
整数型の特性
C# では、次の定義済みの整数型がサポートされています。
C# 型/キーワード | 範囲 | サイズ | .NET 型 |
---|---|---|---|
sbyte |
-128 ~ 127 | 符号付き 8 ビット整数 | System.SByte |
byte |
0 ~ 255 | 符号なし 8 ビット整数 | System.Byte |
short |
-32,768 ~ 32,767 | 符号付き 16 ビット整数 | System.Int16 |
ushort |
0 ~ 65,535 | 符号なし 16 ビット整数 | System.UInt16 |
int |
-2,147,483,648 ~ 2,147,483,647 | 符号付き 32 ビット整数 | System.Int32 |
uint |
0 ~ 4,294,967,295 | 符号なし 32 ビット整数 | System.UInt32 |
long |
-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 | 符号付き 64 ビット整数 | System.Int64 |
ulong |
0 ~ 18,446,744,073,709,551,615 | 符号なし 64 ビット整数 | System.UInt64 |
nint |
プラットフォームに依存 (実行時に計算) | 符号付き 32 ビットまたは 64 ビット整数 | System.IntPtr |
nuint |
プラットフォームに依存 (実行時に計算) | 符号なし 32 ビットまたは 64 ビット整数 | System.UIntPtr |
最後の 2 つを除くすべてのテーブル行で、左端の列の各 C# 型キーワードは、対応する .NET 型の別名です。 キーワードと .NET 型の名前は交換可能です。 たとえば、次の宣言では、同じ型の変数が宣言されています。
int a = 123;
System.Int32 b = 123;
テーブルの最後の 2 行の nint
型と nuint
型は、ネイティブサイズの整数です。 nint
と nuint
コンテキスト キーワードを使用して、"ネイティブサイズの整数" を定義できます。 これらは、32 ビット プロセスで実行される場合は 32 ビット整数、64 ビット プロセスで実行される場合は 64 ビット整数です。 これらは、相互運用シナリオ、低レベル ライブラリ、および整数演算が多用されるシナリオでパフォーマンスを最適化するために使用できます。
ネイティブサイズの整数型は、.NET 型 System.IntPtr および System.UIntPtr として内部で表現されます。 C# 11 以降、nint
型と nuint
型は基になる型の別名です。
各整数型の既定値はゼロ (0
) です。
各整数型には、その型の最小値と最大値を指定する MinValue
プロパティと MaxValue
プロパティがあります。 これらのプロパティは、ネイティブサイズの型 (nint
および nuint
) のケースを除き、コンパイル時の定数です。 MinValue
プロパティと MaxValue
プロパティは、ネイティブサイズの型に対して実行時に計算されます。 これらの型のサイズは、プロセッサの設定によって異なります。
System.Numerics.BigInteger 構造体を使用して、上限や下限のない符号付き整数を表します。
整数リテラル
次の整数リテラルがあります。
- "10 進": プレフィックスなし
- "16 進":
0x
または0X
プレフィックスを使用します - "バイナリ":
0b
または0B
プレフィックスを使用します
次のコードは、それぞれの例を示しています。
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
前の例では、''桁区切り記号'' としての _
の使用も示しています。 数字区切り記号は、あらゆる種類の数値リテラルで使用できます。
整数リテラルの型は、そのサフィックスによって次のように決まります。
サフィックスがないリテラルの型は、
int
、uint
、long
、ulong
の型のうちその値を表すことができる最初のものになります。注意
リテラルは正の値として解釈されます。 たとえば、リテラル
0xFF_FF_FF_FF
は、uint
型の数値4294967295
を表しますが、そのビット表現はint
型の数値-1
と同じになります。 特定の型の値が必要な場合は、リテラルをその型にキャストしてください。 リテラル値をターゲット型で表すことができない場合は、unchecked
演算子を使用します。 たとえば、unchecked((int)0xFF_FF_FF_FF)
を使用すると、-1
が生成されます。リテラルのサフィックスが
U
またはu
の場合、その型は、uint
、ulong
の型のうちその値を表すことができる最初のものになります。リテラルのサフィックスが
L
またはl
の場合、その型は、long
、ulong
の型のうちその値を表すことができる最初のものになります。注意
小文字の
l
はサフィックスとして使用できます。 ただし、文字のl
は数字の1
と混同しやすいため、コンパイラから警告が出されます。 わかりやすくするためにL
を使用してください。リテラルのサフィックスが
UL
、Ul
、uL
、ul
、LU
、Lu
、lU
、またはlu
の場合、その型はulong
です。
整数リテラルで表される値が UInt64.MaxValue を超えると、コンパイル エラー CS1021 が発生します。
整数リテラルの決定された型が int
で、リテラルで表される値が変換先の型の範囲内にある場合、値を暗黙的に sbyte
、byte
、short
、ushort
、uint
、ulong
、nint
、または nuint
に変換できます。
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
前の例で示したように、リテラルの値が変換先の型の範囲内にない場合、コンパイラ エラー CS0031 が発生します。
また、キャストを使用して、整数リテラルによって表される値を、指定された型のリテラル以外の型に変換することもできます。
var signedByte = (sbyte)42;
var longVariable = (long)42;
変換
任意の整数数値型を他の整数数値型に変換することができます。 変換先の型に変換元の型のすべての値を格納できる場合、変換は暗黙的に実行されます。 それ以外の場合は、キャスト式を使用して明示的な変換を実行する必要があります。 詳細については、「組み込みの数値変換」に関するページを参照してください。
ネイティブ サイズの整数
ネイティブ サイズの整数型には、ストレージがターゲット コンピューター上の自然な整数サイズによって決定されるため、特別な動作があります。
実行時にネイティブサイズの整数のサイズを取得するには、
sizeof()
を使用できます。 ただし、コードを安全でないコンテキストでコンパイルする必要があります。 例:Console.WriteLine($"size of nint = {sizeof(nint)}"); Console.WriteLine($"size of nuint = {sizeof(nuint)}"); // output when run in a 64-bit process //size of nint = 8 //size of nuint = 8 // output when run in a 32-bit process //size of nint = 4 //size of nuint = 4
また、静的な IntPtr.Size および UIntPtr.Size プロパティから同等の値を取得することもできます。
実行時にネイティブサイズの整数の最小値と最大値を取得するには、次の例のように、
nint
キーワードとnuint
キーワードで、MinValue
とMaxValue
を静的プロパティとして使用します。Console.WriteLine($"nint.MinValue = {nint.MinValue}"); Console.WriteLine($"nint.MaxValue = {nint.MaxValue}"); Console.WriteLine($"nuint.MinValue = {nuint.MinValue}"); Console.WriteLine($"nuint.MaxValue = {nuint.MaxValue}"); // output when run in a 64-bit process //nint.MinValue = -9223372036854775808 //nint.MaxValue = 9223372036854775807 //nuint.MinValue = 0 //nuint.MaxValue = 18446744073709551615 // output when run in a 32-bit process //nint.MinValue = -2147483648 //nint.MaxValue = 2147483647 //nuint.MinValue = 0 //nuint.MaxValue = 4294967295
次の範囲の定数値を使用できます。
nint
の場合: Int32.MinValue から Int32.MaxValue。nuint
の場合: UInt32.MinValue から UInt32.MaxValue。
コンパイラによって、他の数値型への暗黙的と明示的な変換が提供されます。 詳細については、「組み込みの数値変換」に関するページを参照してください。
ネイティブサイズの整数リテラルには、直接の構文がありません。
long
を示すL
など、リテラルがネイティブサイズの整数であることを示すサフィックスはありません。 代わりに、他の整数値の暗黙的または明示的なキャストを使用できます。 例:nint a = 42 nint a = (nint)42;
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
関連項目
.NET