整数数値型は整数を表します。 整数の数値型はすべて 値型です。 また、これらは 単純型 でもあり、 リテラルで初期化できます。 すべての整数数値型は、 算術演算子、 ビットごとの論理演算子、 比較演算子、等 値 演算子をサポートします。
整数型の特性
C# では、次の定義済みの整数型がサポートされています。
C#のタイプまたはキーワード | Range | サイズ | .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 ( 0
) です。
各整数型には、その型の最小値と最大値を提供する MinValue
プロパティと MaxValue
プロパティがあります。 これらのプロパティは、ネイティブ サイズの型 (nint
と nuint
) の場合を除き、コンパイル時定数です。
MinValue
プロパティとMaxValue
プロパティは、実行時にネイティブ サイズの型に対して計算されます。 これらの種類のサイズは、プロセスの設定によって異なります。
System.Numerics.BigInteger構造体を使用して、上限または下限のない符号付き整数を表します。
整数リテラル
整数リテラルには、次の値を指定できます。
- decimal: プレフィックスなし
-
16 進数:
0x
または0X
プレフィックス -
binary:
0b
または0B
のプレフィックスとして使用
次のコードは、それぞれの例を示しています。
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
前の例では、_
を桁区切り記号として使用する方法も示しています。 桁区切り記号は、すべての種類の数値リテラルと共に使用できます。
整数リテラルの型は、サフィックスによって次のように決定されます。
リテラルにサフィックスがない場合、その型は、値を表すことができる最初の型 (
int
、uint
、long
、ulong
) です。注
リテラルは正の値として解釈されます。 たとえば、リテラル
0xFF_FF_FF_FF
は4294967295
型の数値uint
を表しますが、-1
型の数値int
と同じビット表現を持ちます。 特定の型の値が必要な場合は、リテラルをその型に変換します。 リテラル値をターゲット型で表すことができない場合は、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 プロパティから同等の値を取得することもできます。
実行時にネイティブ サイズの整数の最小値と最大値を取得するには、次の例に示すように、
MinValue
とMaxValue
を静的プロパティとしてnint
キーワードとnuint
キーワードと共に使用します。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
とnuint
の全範囲が大きくなる可能性はありますが、コンパイル時定数は 32 ビット範囲に制限されます。-
nint
の場合: Int32.MinValueをInt32.MaxValueに。 -
nuint
の場合: UInt32.MinValueをUInt32.MaxValueに。
-
コンパイラは、他の数値型への暗黙的および明示的な変換を提供します。 詳細については、「 組み込みの数値変換」を参照してください。
ネイティブ サイズの整数リテラルの直接構文はありません。 リテラルがネイティブ サイズの整数であることを示すサフィックスはありません (
L
を示すlong
など)。 代わりに、他の整数値の暗黙的または明示的なキャストを使用できます。 例えば次が挙げられます。nint a = 42 nint a = (nint)42;
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
こちらも参照ください
.NET