整数数値型 (C# リファレンス)Integral numeric types (C# reference)

"整数数値型" は、整数値を表します。The integral numeric types represent integer numbers. すべての整数数値型は、値の型です。All integral numeric types are value types. また、単純型でもあり、リテラルを使用して初期化することができます。They are also simple types and can be initialized with literals. すべての整数数値型では、算術ビット論理比較等値演算子がサポートされています。All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.

整数型の特性Characteristics of the integral types

C# では、次の定義済みの整数型がサポートされています。C# supports the following predefined integral types:

C# 型/キーワードC# type/keyword 範囲Range サイズSize .NET 型.NET type
sbyte -128 ~ 127-128 to 127 符号付き 8 ビット整数Signed 8-bit integer System.SByte
byte 0 ~ 2550 to 255 符号なし 8 ビット整数Unsigned 8-bit integer System.Byte
short -32,768 ~ 32,767-32,768 to 32,767 符号付き 16 ビット整数Signed 16-bit integer System.Int16
ushort 0 ~ 65,5350 to 65,535 符号なし 16 ビット整数Unsigned 16-bit integer System.UInt16
int -2,147,483,648 ~ 2,147,483,647-2,147,483,648 to 2,147,483,647 符号付き 32 ビット整数Signed 32-bit integer System.Int32
uint 0 ~ 4,294,967,2950 to 4,294,967,295 符号なし 32 ビット整数Unsigned 32-bit integer System.UInt32
long -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 符号付き 64 ビット整数Signed 64-bit integer System.Int64
ulong 0 ~ 18,446,744,073,709,551,6150 to 18,446,744,073,709,551,615 符号なし 64 ビット整数Unsigned 64-bit integer System.UInt64

上の表で、左端の列にある各 C# 型のキーワードは、対応する .NET 型の別名です。In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. これらは交換可能です。They are interchangeable. たとえば、次の宣言では同じ型の変数が宣言されています。For example, the following declarations declare variables of the same type:

int a = 123;
System.Int32 b = 123;

各整数型の既定値はゼロ (0) です。The default value of each integral type is zero, 0. 各整数型には、その型の最小値と最大値を指定する MinValue および MaxValue 定数があります。Each of the integral types has the MinValue and MaxValue constants that provide the minimum and maximum value of that type.

System.Numerics.BigInteger 構造体を使用して、上限や下限のない符号付き整数を表します。Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.

整数リテラルInteger literals

次の整数リテラルがあります。Integer literals can be

  • "10 進": プレフィックスなしdecimal: without any prefix
  • "16 進": 0x または 0X プレフィックスを使用しますhexadecimal: with the 0x or 0X prefix
  • "バイナリ": 0b または 0B プレフィックスを使用します (C# 7.0 以降で使用できます)binary: with the 0b or 0B prefix (available in C# 7.0 and later)

次のコードは、それぞれの例を示しています。The following code demonstrates an example of each:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

前述の例は、C# 7.0 以降でサポートされている "桁区切り記号" としての _ の使用法も示しています。The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. 数字区切り記号は、あらゆる種類の数値リテラルで使用できます。You can use the digit separator with all kinds of numeric literals.

整数リテラルの型は、そのサフィックスによって次のように決まります。The type of an integer literal is determined by its suffix as follows:

  • サフィックスがないリテラルの型は、intuintlongulong の型のうちその値を表すことができる最初のものになります。If the literal has no suffix, its type is the first of the following types in which its value can be represented: int, uint, long, ulong.

  • リテラルのサフィックスが U または u の場合、その型は、uintulong の型のうちその値を表すことができる最初のものになります。If the literal is suffixed by U or u, its type is the first of the following types in which its value can be represented: uint, ulong.

  • リテラルのサフィックスが L または l の場合、その型は、longulong の型のうちその値を表すことができる最初のものになります。If the literal is suffixed by L or l, its type is the first of the following types in which its value can be represented: long, ulong.

    注意

    小文字の l はサフィックスとして使用できます。You can use the lowercase letter l as a suffix. ただし、文字の l は数字の 1 と混同しやすいため、コンパイラから警告が出されます。However, this generates a compiler warning because the letter l can be confused with the digit 1. わかりやすくするために L を使用してください。Use L for clarity.

  • リテラルのサフィックスが ULUluLulLULulU、または lu の場合、その型は ulong です。If the literal is suffixed by UL, Ul, uL, ul, LU, Lu, lU, or lu, its type is ulong.

整数リテラルで表される値が UInt64.MaxValue を超えると、コンパイル エラー CS1021 が発生します。If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

整数リテラルの決定された型が int で、リテラルで表される値が変換先の型の範囲内にある場合、値を暗黙的に sbytebyteshortushortuint、または ulong に変換できます。If the determined type of an integer literal is int and the value represented by the literal is within the range of the destination type, the value can be implicitly converted to sbyte, byte, short, ushort, uint, or ulong:

byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

前の例で示したように、リテラルの値が変換先の型の範囲内にない場合、コンパイラ エラー CS0031 が発生します。As the preceding example shows, if the literal's value is not within the range of the destination type, a compiler error CS0031 occurs.

また、キャストを使用して、整数リテラルによって表される値を、指定された型のリテラル以外の型に変換することもできます。You can also use a cast to convert the value represented by an integer literal to the type other than the determined type of the literal:

var signedByte = (sbyte)42;
var longVariable = (long)42;

変換Conversions

任意の整数数値型を他の整数数値型に変換することができます。You can convert any integral numeric type to any other integral numeric type. 変換先の型に変換元の型のすべての値を格納できる場合、変換は暗黙的に実行されます。If the destination type can store all values of the source type, the conversion is implicit. それ以外の場合は、キャスト式を使用して明示的な変換を実行する必要があります。Otherwise, you need to use a cast expression to perform an explicit conversion. 詳細については、「組み込みの数値変換」に関するページを参照してください。For more information, see Built-in numeric conversions.

C# 言語仕様C# language specification

詳細については、「C# 言語仕様」の次のセクションを参照してください。For more information, see the following sections of the C# language specification:

関連項目See also