정수 숫자 형식(C# 참조)Integral numeric types (C# reference)

정수 숫자 형식단순 형식의 하위 집합이며 리터럴을 사용하여 초기화할 수 있습니다.The integral numeric types are a subset of the simple types and can be initialized with literals. 모든 정수 형식도 값 형식입니다.All integral types are also value types. 모든 정수 숫자 형식은 산술, 비트 논리, 비교같음 연산자를 지원합니다.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 SizeSize .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. 각 정수 형식에는 해당 형식의 최솟값과 최댓값을 제공하는 MinValueMaxValue 상수가 있습니다.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:

  • 리터럴에 접미사가 없는 경우 해당 형식은 값이 표현될 수 있는 int, uint, long, ulong 형식 중 첫 번째 형식입니다.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인 경우 해당 형식은 값이 표현될 수 있는 uint, ulong 형식 중 첫 번째 형식입니다.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인 경우 해당 형식은 값이 표현될 수 있는 long, ulong 형식 중 첫 번째 형식입니다.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.

  • 리터럴의 접미사가 UL, Ul, uL, ul, LU, Lu, lU 또는 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이고 리터럴이 나타내는 값이 대상 형식의 범위 내에 있는 경우, 해당 값이 암시적으로 sbyte, byte, short, ushort, uint 또는 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 also can 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. 그렇지 않으면 cast 연산자 ()를 사용하여 명시적 변환을 호출해야 합니다.Otherwise, you need to use the cast operator () to invoke 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