명시적 숫자 변환 표(C# 참조)Explicit numeric conversions table (C# Reference)

다음 표에서는 암시적 변환이 없는 .NET 숫자 형식 간의 미리 정의된 명시적 변환을 보여 줍니다.The following table shows the predefined explicit conversions between .NET numeric types for which there is no implicit conversion.

시작From 대상To
sbytesbyte byte, ushort, uint, ulong 또는 charbyte, ushort, uint, ulong, or char
bytebyte sbyte 또는 charsbyte or char
shortshort sbyte, byte, ushort, uint, ulong 또는 charsbyte, byte, ushort, uint, ulong, or char
ushortushort sbyte, byte, short 또는 charsbyte, byte, short, or char
intint sbyte, byte, short, ushort, uint, ulong 또는 charsbyte, byte, short, ushort, uint, ulong,or char
uintuint sbyte, byte, short, ushort, int 또는 charsbyte, byte, short, ushort, int, or char
longlong sbyte, byte, short, ushort, int, uint, ulong 또는 charsbyte, byte, short, ushort, int, uint, ulong, or char
ulongulong sbyte, byte, short, ushort, int, uint, long 또는 charsbyte, byte, short, ushort, int, uint, long, or char
charchar sbyte, byte또는 shortsbyte, byte, or short
floatfloat sbyte, byte, short, ushort, int, uint, long, ulong, char 또는 decimalsbyte, byte, short, ushort, int, uint, long, ulong, char,or decimal
doubledouble sbyte, byte, short, ushort, int, uint, long, ulong, char, float 또는 decimalsbyte, byte, short, ushort, int, uint, long, ulong, char, float,or decimal
decimaldecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float 또는 doublesbyte, byte, short, ushort, int, uint, long, ulong, char, float, or double

설명Remarks

  • 명시적 숫자 변환으로 인해 자릿수 손실 또는 예외(일반적으로 OverflowException)가 throw될 수 있습니다.The explicit numeric conversion may cause loss of precision or result in throwing an exception, typically an OverflowException.

  • 정수 형식의 값을 다른 정수 형식으로 변환하면 결과는 오버플로 검사 컨텍스트에 따라 달라집니다.When you convert a value of an integral type to another integral type, the result depends on the overflow checking context. 확인된 컨텍스트에서 소스 값이 대상 형식의 범위 내에 있으면 변환이 성공합니다.In a checked context, the conversion succeeds if the source value is within the range of the destination type. 그렇지 않으면 OverflowException이 throw됩니다.Otherwise, an OverflowException is thrown. 확인되지 않은 컨텍스트에서 변환은 항상 성공하고 다음과 같이 진행됩니다.In an unchecked context, the conversion always succeeds, and proceeds as follows:

    • 소스 형식이 대상 형식보다 큰 경우 소스 값은 가장 중요한 비트인 해당 "extra"를 삭제함으로써 잘립니다.If the source type is larger than the destination type, then the source value is truncated by discarding its "extra" most significant bits. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.The result is then treated as a value of the destination type.

    • 소스 형식이 대상 형식보다 작은 경우 소스 값은 대상 형식과 크기가 같도록 부호 확장 또는 0 확장 중 하나입니다.If the source type is smaller than the destination type, then the source value is either sign-extended or zero-extended so that it is the same size as the destination type. 부호 확장은 소스 형식이 서명된 경우 사용되며, 소스 형식이 서명되지 않은 경우 0 확장이 사용됩니다.Sign-extension is used if the source type is signed; zero-extension is used if the source type is unsigned. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.The result is then treated as a value of the destination type.

    • 소스 형식이 대상 형식과 동일한 크기인 경우 소스 값은 대상 형식의 값으로 처리됩니다.If the source type is the same size as the destination type, then the source value is treated as a value of the destination type.

  • decimal 값을 정수 형식으로 변환하면, 이 값은 0을 향한 방향으로 가장 가까운 정수값으로 반올림됩니다.When you convert a decimal value to an integral type, this value is rounded towards zero to the nearest integral value. 결과 정수 값이 대상 형식 범위에서 벗어났을 경우 OverflowException이 throw됩니다.If the resulting integral value is outside the range of the destination type, an OverflowException is thrown.

  • double 또는 float 값을 정수 형식으로 변환하면, 이 값은 0을 향한 방향으로 가장 가까운 정수값으로 반올림됩니다.When you convert a double or float value to an integral type, this value is rounded towards zero to the nearest integral value. 결과 정수 값이 대상 형식 범위에서 벗어났을 경우 결과는 오버플로 검사 컨텍스트에 따라 달라집니다.If the resulting integral value is outside the range of the destination type, the result depends on the overflow checking context. Checked 컨텍스트에서는 OverflowException이 throw됩니다. 반면 Unchecked 컨텍스트에서 결과는 지정되지 않은 대상 형식 값이 됩니다.In a checked context, an OverflowException is thrown, while in an unchecked context, the result is an unspecified value of the destination type.

  • doublefloat로 변환할 경우 double 값을 가장 가까운 float 값으로 반올림합니다.When you convert double to float, the double value is rounded to the nearest float value. double 값이 너무 크거나 작아서 대상 형식에 맞출 수 없을 경우 결과 값은 0 또는 무한대가 됩니다.If the double value is too small or too large to fit into the destination type, the result will be zero or infinity.

  • float 또는 doubledecimal로 변환할 경우 소스 값을 decimal 표현으로 변환한 다음 필요한 경우 가장 가까운 소수점 이하 28번째 자리로 반올림합니다.When you convert float or double to decimal, the source value is converted to decimal representation and rounded to the nearest number after the 28th decimal place if required. 소스 값에 따라 다음 결과 중 하나가 발생할 수 있습니다.Depending on the value of the source value, one of the following results may occur:

    • 소스 값이 너무 작아서 decimal로 나타낼 수 없을 경우 결과 값은 0이 됩니다.If the source value is too small to be represented as a decimal, the result becomes zero.

    • 소스 값이 NaN(숫자가 아님), 무한대 또는 너무 커서 decimal로 나타낼 수 없을 경우 OverflowException을 throw합니다.If the source value is NaN (not a number), infinity, or too large to be represented as a decimal, an OverflowException is thrown.

  • decimalfloat 또는 double로 변환할 경우 decimal 값을 가장 가까운 double 또는 float 값으로 반올림합니다.When you convert decimal to float or double, the decimal value is rounded to the nearest double or float value.

명시적 변환에 대한 자세한 내용은 C# 언어 사양명시적 변환 섹션을 참조하세요.For more information about explicit conversions, see the Explicit conversions section of the C# language specification.

참고 항목See also