다음을 통해 공유


부동 소수점 형식에서 변환

다른 부동 소수점 형식으로 변환되는 부동 소수점 값은 원래 값을 결과 형식에서 정확하게 표현할 수 있는 경우 값이 변경되지 않습니다. 원래 값이 숫자이지만 정확하게 표현할 수 없는 경우 결과는 다음으로 크거나 다음으로 작은 표현할 수 있는 값입니다. 부동 소수점 형식의 범위에 대해서는 부동 소수점 상수에 대한 제한을 참조하세요.

정수 형식으로 변환되는 부동 소수점 값은 먼저 소수 부분을 제거하여 잘립니다. 이 잘린 값을 결과 형식에서 표현할 수 있는 경우 결과는 해당 값이어야 합니다. 표현할 수 없는 경우 결과 값은 정의되지 않습니다.

Microsoft 전용

Microsoft 컴파일러는 float 값에 IEEE-754 binary32 표현을 사용하고, long doubledouble 에 binary64 표현을 사용합니다. long doubledouble 은 동일한 표현을 사용하므로 범위 및 전체 자릿수가 동일합니다.

컴파일러는 double 또는 long double 부동 소수점 숫자를 float로 변환하는 경우 부동 소수점 환경 컨트롤에 따라 결과를 반올림합니다. 이 컨트롤은 기본적으로 “가장 가까운 짝수로 반올림(round to nearest, ties to even)”합니다. 숫자 값이 너무 크거나 너무 작아서 숫자 float 값으로 나타낼 수 없는 경우 변환 결과는 원래 값의 부호에 따라 양 또는 음의 무한대이고, 사용하도록 설정된 경우 오버플로 예외가 발생합니다.

long보다 작은 정수 형식으로의 변환 결과는 값을 long으로 변환한 후 결과 형식으로 변환하는 결과입니다.

long 이상의 정수 형식으로 변환하는 경우 너무 크거나 작아 결과 형식으로 나타낼 수 없는 값의 변환은 다음 값 중 하나를 반환할 수 있습니다.

  • 결과는 0에서 가장 먼 표현할 수 있는 값인 ‘센티널 값’일 수 있습니다. 부호 있는 형식의 경우 표현할 수 있는 가장 낮은 값(0x800...0)입니다. 부호 없는 형식의 경우 표현할 수 있는 가장 높은 값(0xFF...F)입니다.

  • 결과는 포화될 수 있습니다. 즉, 너무 높아 표현할 수 없는 값은 표현할 수 있는 가장 높은 값으로 변환됩니다. 너무 낮아 표현할 수 없는 값은 표현할 수 있는 가장 낮은 값으로 변환됩니다. 관련 두 값 중 하나가 센티널 값으로도 사용됩니다.

  • unsigned long 또는 unsigned long long 으로 변환하는 경우 범위를 벗어난 값을 변환하는 결과는 표현할 수 있는 가장 높거나 가장 낮은 값이 아닌 값이 될 수 있습니다. 결과가 센티널 또는 포화 값인지 여부는 컴파일러 옵션 및 대상 아키텍처에 따라 달라집니다. 이후 컴파일러 릴리스에서는 대신 포화 또는 센티널 값을 반환할 수 있습니다.

Microsoft 전용 종료

다음 표에서는 부동 형식의 변환을 요약합니다.

부동 소수점 형식에서 변환표

시작 대상 메서드
float char long으로 변환한 후 longchar로 변환합니다.
float short long으로 변환한 후 longshort로 변환합니다.
float int 소수점에서 자릅니다. 결과가 커서 int 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float long 소수점에서 자릅니다. 결과가 커서 long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float long long 소수점에서 자릅니다. 결과가 커서 long long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float unsigned char long으로 변환한 후 longunsigned char로 변환합니다.
float unsigned short long으로 변환한 후 longunsigned short로 변환합니다.
float unsigned 소수점에서 자릅니다. 결과가 커서 unsigned 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float unsigned long 소수점에서 자릅니다. 결과가 커서 unsigned long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float unsigned long long 소수점에서 자릅니다. 결과가 커서 unsigned long long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
float double double 로 나타냅니다.
float long double long double 로 나타냅니다. MSVC에서 long doubledouble은 표현이 같습니다.
double char float로 변환한 후 floatchar로 변환합니다.
double short float으로 변환한 후 floatshort로 변환합니다.
double int 소수점에서 자릅니다. 결과가 커서 int 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
double long 소수점에서 자릅니다. 결과가 커서 long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
double unsigned char long으로 변환한 후 longunsigned char로 변환합니다.
double unsigned short long으로 변환한 후 longunsigned short로 변환합니다.
double unsigned 소수점에서 자릅니다. 결과가 커서 unsigned 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
double unsigned long 소수점에서 자릅니다. 결과가 커서 unsigned long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
double unsigned long long 소수점에서 자릅니다. 결과가 커서 unsigned long long 으로 나타낼 수 없는 경우 결과가 정의되지 않습니다.
double float float 로 나타냅니다. double 값을 float로 정확히 나타낼 수 없는 경우 정밀도가 손실됩니다.
double long double long double 값은 double 로 처리됩니다.

long double 변환은 double 변환과 동일한 방법을 따릅니다.

참조

할당 변환