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 Framework 형식.NET Framework 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 Int64

리터럴Literals

10진수 리터럴, 16진수 리터럴 또는 (C# 7부터) 이진 리터럴을 할당하여 long 변수를 선언하고 초기화할 수 있습니다.You can declare and initialize a long variable by assigning a decimal literal, a hexadecimal literal, or (starting with C# 7) a binary literal to it.

다음 예제에서는 10진수, 16진수 및 이진 리터럴로 표현된 4,294,967,296과 같은 정수가 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

참고

0x 또는 0X 접두사를 사용하여 16진수 리터럴을 나타내고, 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, 몇 가지 기능이 추가 된 가독성을 향상 시키기 합니다.Starting with C# 7, 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. L 접미사는 long을 나타냅니다.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. 예를 들어 다음 오버로드된 메서드에는 longint 형식의 매개 변수가 있습니다.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  

부동 소수점 형식 및 정수 형식이 혼합된 산술 식에 대한 자세한 내용은 floatdouble을 참조하세요.For information on arithmetic expressions with mixed floating-point types and integral types, see float and double.

변환Conversions

long에서 float, double 또는 decimal로 미리 정의된 암시적 변환이 있습니다.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  

sbyte, byte, short, ushort, int, uint 또는 char에서 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# 언어 사양을 참조하세요. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목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