다음을 통해 공유


산술 변환

많은 이항 연산자(이항 연산자로 구성된 식에서 설명)로 인해 피연산자가 변환되며 같은 방식으로 결과가 생성됩니다. 이러한 연산자가 변환을 일으키는 방식을 "일반적인 산술 변환"이라고 합니다. 다양한 네이티브 형식의 피연산자에 대한 산술 변환은 다음 표에 나와 있는 대로 수행됩니다. typedef 형식은 해당 기본 네이티브 형식에 따라 동작합니다.

형식 변환의 조건

조건 충족

변환

피연산자 중 하나가 long double 형식입니다.

다른 피연산자가 long double 형식으로 변환됩니다.

이전 조건이 충족되지 않았고 피연산자 중 하나가 double 형식입니다.

다른 피연산자가 double 형식으로 변환됩니다.

이전 조건이 충족되지 않았고 피연산자 중 하나가 float 형식입니다.

다른 피연산자가 float 형식으로 변환됩니다.

이전 조건이 충족되지 않았습니다(부동 형식인 피연산자가 없음).

정수 계열 확장이 다음과 같이 피연산자에 대해 수행됩니다.

  • 피연산자 중 하나가 unsigned long 형식인 경우 다른 피연산자가 unsigned long 형식으로 변환됩니다.

  • 이전 조건이 충족되지 않았으며 피연산자 중 하나가 long 형식이고 다른 피연산자가 unsigned int 형식인 경우 두 피연산자가 모두 unsigned long 형식으로 변환됩니다.

  • 두 이전 조건이 충족되지 않았으며 피연산자 중 하나가 long 형식인 경우 다른 피연산자가 long 형식으로 변환됩니다.

  • 세 이전 조건이 충족되지 않았으며 피연산자 중 하나가 unsigned int 형식인 경우 다른 피연산자가 unsigned int 형식으로 변환됩니다.

  • 이전 조건 중 어떤 조건도 충족되지 않은 경우 두 피연산자가 모두 int 형식으로 변환됩니다.

다음 코드에서는 표에 설명된 변환 규칙을 보여 줍니다.

// arithmetic_conversions.cpp
double dVal;
float fVal;
int iVal;
unsigned long ulVal;

int main() {
   // iVal converted to unsigned long
   // result of multiplication converted to double
   dVal = iVal * ulVal;

   // ulVal converted to float
   // result of addition converted to double
   dVal = ulVal + fVal;
}

위의 예제에서 첫 번째 문은 iVal과 ulVal이라는 두 정수 계열 형식을 곱한 것입니다. 충족된 조건은 두 피연산자 모두 부동 형식이 아니고 한 피연산자가 unsigned int 형식이라는 것입니다. 따라서 다른 피연산자인 iVal이 unsigned int 형식으로 변환됩니다. 결과는 dVal에 할당됩니다. 충족된 조건은 한 피연산자가 double 형식이라는 것이므로 곱셈의 unsigned int 결과가 double 형식으로 변환됩니다.

위의 예제에서 두 번째 문은 float 형식과 정수 계열 형식인 fVal 및 ulVal을 더한 것입니다. ulVal 변수가 float 형식으로 변환됩니다(표의 세 번째 조건). 덧셈의 결과는 double 형식으로 변환(표의 두 번째 조건)되고 dVal에 할당됩니다.

참고 항목

참조

표준 변환