long (C# リファレンス)long (C# Reference)

long は、次の表に示されたサイズと範囲に従って値を格納する整数型を示します。long denotes an integral type that stores values according to the size and range shown in the following table.

Type 範囲Range サイズSize .NET 型.NET type
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

リテラルLiterals

long 変数を宣言し、10 進リテラル、16 進リテラル、または (C# 7.0 以降) バイナリ リテラルを割り当てることによって初期化できます。You can declare and initialize a long variable by assigning a decimal literal, a hexadecimal literal, or (starting with C# 7.0) a binary literal to it.

次の例では、整数 4,294,967,296 を 10 進リテラル、16 進リテラル、バイナリ リテラルで表したものが、long 値に割り当てられています。In the following example, integers equal to 4,294,967,296 that are represented as decimal, hexadecimal, and binary literals are assigned to long values.

long longValue1 = 4294967296;
Console.WriteLine(longValue1);

long longValue2 = 0x100000000;
Console.WriteLine(longValue2);

long longValue3 = 0b1_0000_0000_0000_0000_0000_0000_0000_0000;
Console.WriteLine(longValue3);
// The example displays the following output:
//          4294967296
//          4294967296
//          4294967296

注意

16 進リテラルを表すにはプレフィックス 0x または 0X を使い、バイナリ リテラルを表すにはプレフィックス 0b または 0B を使います。You use the prefix 0x or 0X to denote a hexadecimal literal and the prefix 0b or 0B to denote a binary literal. 10 進リテラルには、プレフィックスはありません。Decimal literals have no prefix.

C# 7.0 以降では、読みやすさを強化するためにいくつかの機能が追加されています。Starting with C# 7.0, a couple of features have been added to enhance readability.

  • C# 7.0 では、桁区切り記号としてアンダースコア文字 (_) が使用できます。C# 7.0 allows the usage of the underscore character, _, as a digit separator.
  • C# 7.2 では、プレフィックスの後に、_ をバイナリまたは 16 進リテラルの桁区切り記号として使用できます。C# 7.2 allows _ to be used as a digit separator for a binary or hexadecimal literal, after the prefix. 10 進リテラルは先頭にアンダー スコアを持つことはできません。A decimal literal isn't permitted to have a leading underscore.

以下にいくつか例を示します。Some examples are shown below.

long longValue1 = 4_294_967_296;
Console.WriteLine(longValue1);

long longValue2 = 0x1_0000_0000;
Console.WriteLine(longValue2);

long longValue3 = 0b1_0000_0000_0000_0000_0000_0000_0000_0000;
Console.WriteLine(longValue3);

long longValue4 = 0x_1_0000_0000;       // C# 7.2 onwards
Console.WriteLine(longValue4);

long longValue5 = 0b_1_0000_0000_0000_0000_0000_0000_0000_0000;       // C# 7.2 onwards
Console.WriteLine(longValue5);
// The example displays the following output:
//          4294967296
//          4294967296
//          4294967296
//          4294967296
//          4294967296

整数リテラルには、型を表すサフィックスを含めることもできます。Integer literals can also include a suffix that denotes the type. サフィックス Llong を表します。The suffix L denotes a long. 次の例では、L サフィックスを使って long 整数を示しています。The following example uses the L suffix to denote a long integer:

long value = 4294967296L;  

注意

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

サフィックス L を使う場合、整数リテラルの型は、そのサイズに応じて long または ulong のいずれかに決まります。When you use the suffix L, the type of the literal integer is determined to be either long or ulong, depending on its size. この場合、整数リテラルが ulong の範囲より小さいため、long になります。In this case, it is long because it less than the range of ulong.

サフィックスは、オーバーロードされたメソッドの呼び出しによく使われます。A common use of the suffix is to call overloaded methods. たとえば、次のオーバーロードされたメソッドには、long 型と int 型のパラメーターがあります。For example, the following overloaded methods have parameters of type long and int:

public static void SampleMethod(int i) {}  
public static void SampleMethod(long l) {}  

L サフィックスにより、適切なオーバーロードが呼び出されることが保証されます。The L suffix guarantees that the correct overload is called:

SampleMethod(5);    // Calls the method with the int parameter  
SampleMethod(5L);   // Calls the method with the long parameter  

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

  1. intint
  2. uintuint
  3. long
  4. ulongulong

前の例のリテラル 4294967296 は、uint の範囲を超えているため、long 型になります (整数型の記憶サイズについては、「整数型の一覧表」をご覧ください)。The literal 4294967296 in the previous examples is of type long, because it exceeds the range of uint (see Integral Types Table for the storage sizes of integral types).

同じ式の他の整数型で long 型を使うと、式は long (関係式またはブール式の場合は bool) として評価されます。If you use the long type with other integral types in the same expression, the expression is evaluated as long (or bool in the case of relational or Boolean expressions). たとえば、次の式は long として評価されます。For example, the following expression evaluates as long:

898L + 88  

浮動小数点型と整数型の混在する算術式の詳細については、「float」と「double」を参照してください。For information on arithmetic expressions with mixed floating-point types and integral types, see float and double.

変換Conversions

long から floatdoubledecimal への暗黙の型変換が組み込まれています。There is a predefined implicit conversion from long to float, double, or decimal. それ以外の型の場合は、キャストを使用する必要があります。Otherwise a cast must be used. たとえば、次の代入ステートメントは、明示的なキャストを使用しない場合、コンパイル エラーになります。For example, the following statement will produce a compilation error without an explicit cast:

int x = 8L;        // Error: no implicit conversion from long to int  
int x = (int)8L;   // OK: explicit conversion to int  

sbytebyteshortushortintuintchar から long への暗黙の型変換が組み込まれています。There is a predefined implicit conversion from sbyte, byte, short, ushort, int, uint, or char to long.

また、浮動小数点型から long への暗黙の型変換が行われないことにも注意してください。Notice also that there is no implicit conversion from floating-point types to long. たとえば、次のステートメントは、明示的なキャストを使用しない場合、コンパイル エラーになります。For example, the following statement generates a compiler error unless an explicit cast is used:

long x = 3.0;         // Error: no implicit conversion from double  
long y = (long)3.0;   // OK: explicit conversion  

C# 言語仕様C# Language Specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

参照See Also

Int64
C# リファレンスC# Reference
C# プログラミング ガイドC# Programming Guide
C# のキーワードC# Keywords
整数型の一覧表Integral Types Table
組み込み型の一覧表Built-In Types Table
暗黙的な数値変換の一覧表Implicit Numeric Conversions Table
明示的な数値変換の一覧表Explicit Numeric Conversions Table