정수 숫자 형식(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 크기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. 각 정수 형식에는 해당 형식의 최솟값과 최댓값을 제공하는 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.

정수 리터럴Integral literals

정수 리터럴은 10진수 리터럴, 16진수 리터럴 또는 이진 리터럴로 지정할 수 있습니다.Integral literals can be specified as decimal literals, hexadecimal literals, or binary literals. 아래에 각각의 예제가 나와 있습니다.An example of each is shown below:

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

10진수 리터럴에는 어떤 접두사도 필요하지 않습니다.Decimal literals don't require any prefix. x 또는 X 접두사는 16진수 리터럴을 의미합니다.The x or X prefix signifies a hexadecimal literal. b 또는 B 접두사는 이진 리터럴을 의미합니다.The b or B prefix signifies a binary literal. binaryLiteral의 선언은 _을(를) 숫자 구분 기호로 사용하는 것을 보여줍니다.The declaration of binaryLiteral demonstrates the use of _ as a digit separator. 숫자 구분 기호는 모든 숫자 리터럴과 함께 사용할 수 있습니다.The digit separator can be used with all numeric literals. 이진 리터럴 및 숫자 구분 기호 _은(는) C# 7.0부터 지원됩니다.Binary literals and the digit separator _ are supported starting with C# 7.0.

리터럴 접미사Literal suffixes

l 또는 L 접미사는 정수 리터럴이 long 유형이어야 함을 지정합니다.The l or L suffix specifies that the integral literal should be of the long type. ul 또는 UL 접미사는 ulong 유형을 지정합니다.The ul or UL suffix specifies the ulong type. L 접미사가 9,223,372,036,854,775,807(long의 최댓값)보다 큰 리터럴에서 사용되는 경우 ulong 유형으로 변환됩니다.If the L suffix is used on a literal that is greater than 9,223,372,036,854,775,807 (the maximum value of long), the value is converted to the ulong type. 정수 리터럴로 표시되는 값이 UInt64.MaxValue을 초과하면 컴파일 오류 CS1021이 발생합니다.If the value represented by an integral literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

참고

소문자 "l"을 접미사로 사용할 수 있습니다.You can 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.

정수 리터럴 유형Type of an integral literal

정수 리터럴에 접미사가 없는 경우 해당 형식은 값이 표현될 수 있는 다음 형식 중 첫 번째 형식입니다.If an integral literal has no suffix, its type is the first of the following types in which its value can be represented:

  1. int
  2. uint
  3. long
  4. ulong

할당 또는 캐스트를 사용하여 정수 리터럴을 기본값보다 작은 범위의 형식으로 변환할 수 있습니다.You can convert an integral literal to a type with a smaller range than the default using either an assignment or a cast:

byte byteVariable = 42; // type is byte
var signedByte = (sbyte)42; // type is sbyte.

정수 리터럴을 리터럴에 할당, 캐스트 또는 접미사를 사용하여 기본값보다 큰 범위의 형식으로 변환할 수 있습니다.You can convert an integral literal to a type with a larger range than the default using either assignment, a cast, or a suffix on the literal:

var unsignedLong = 42UL;
var longVariable = 42L;
ulong anotherUnsignedLong = 42;
var anotherLong = (long)42;

변환Conversions

대상 유형에는 소스 유형의 모든 값을 저장할 수 있는 두 개의 정수 유형 간에 암시적 변환(확대 변환이라고 함)이 있습니다.There's an implicit conversion (called a widening conversion) between any two integral types where the destination type can store all values of the source type. 예를 들어 int 값의 범위가 long의 적절한 하위 집합이기 때문에 int에서 long으로의 암시적 변환이 있습니다.For example, there's an implicit conversion from int to long because the range of int values is a proper subset of long. 더 작은 부호 없는 정수 형식에서 더 큰 부호 있는 정수 형식으로 암시적 변환이 있습니다.There are implicit conversions from a smaller unsigned integral type to a larger signed integral type. 정수 형식에서 부동 소수점 형식으로 변환하는 암시적 변환도 있습니다.There's also an implicit conversion from any integral type to any floating-point type. 부호 있는 정수 형식에서 부호 없는 정수 형식으로 변환하는 암시적 변환은 없습니다.There's no implicit conversion from any signed integral type to any unsigned integral type.

암시적 변환이 소스 유형에서 대상 유형으로 정의되지 않은 경우 명시적 캐스트를 사용하여 하나의 정수 형식을 다른 정수 형식으로 변환해야 합니다.You must use an explicit cast to convert one integral type to another integral type when an implicit conversion is not defined from the source type to the destination type. 이를 축소 변환이라고 합니다.This is called a narrowing conversion. 변환이 데이터 손실을 초래할 수 있기 때문에 명시적인 사례가 필요합니다.The explicit case is required because the conversion can result in data loss.

참고 항목See also