일반적인 산술 변환Usual Arithmetic Conversions

대부분의 C 연산자는 형식 변환을 수행하여 식의 피연산자를 공용 형식으로 변환하거나 short 값을 컴퓨터 연산에서 사용되는 정수 크기로 확장합니다.Most C operators perform type conversions to bring the operands of an expression to a common type or to extend short values to the integer size used in machine operations. C 연산자로 수행되는 변환은 특정 연산자와 피연산자의 형식에 따라 달라집니다.The conversions performed by C operators depend on the specific operator and the type of the operand or operands. 하지만 많은 연산자는 정수 계열 및 부동 형식의 피연산자에 대해 비슷한 변환을 수행합니다.However, many operators perform similar conversions on operands of integral and floating types. 이러한 변환을 "산술 변환"이라고 합니다.These conversions are known as "arithmetic conversions." 피연산자 값을 호환되는 형식으로 변환하는 경우 해당 값이 변경되지 않습니다.Conversion of an operand value to a compatible type causes no change to its value.

아래에 요약된 산술 변환은 "일반적인 산술 변환"이라고 합니다.The arithmetic conversions summarized below are called "usual arithmetic conversions." 이러한 단계는 산술 형식을 예상하는 이항 연산자에만 적용됩니다.These steps are applied only for binary operators that expect arithmetic type. 목적은 결과의 형식이기도 한 공용 형식을 생성하는 것입니다.The purpose is to yield a common type which is also the type of the result. 실제로 발생하는 변환을 확인하기 위해 컴파일러는 식의 이항 연산에 다음 알고리즘을 적용합니다.To determine which conversions actually take place, the compiler applies the following algorithm to binary operations in the expression. 아래의 단계는 우선 순위가 아닙니다.The steps below are not a precedence order.

  1. 피연산자 중 하나가 long double 형식인 경우 다른 피연산자가 long double 형식으로 변환됩니다.If either operand is of type long double, the other operand is converted to type long double.

  2. 위의 조건이 충족되지 않고 피연산자 중 하나가 double 형식인 경우 다른 피연산자는 double 형식으로 변환됩니다.If the above condition is not met and either operand is of type double, the other operand is converted to type double.

  3. 위의 두 조건이 충족되지 않고 피연산자 중 하나가 float 형식인 경우 다른 피연산자는 float 형식으로 변환됩니다.If the above two conditions are not met and either operand is of type float, the other operand is converted to type float.

  4. 위의 세 조건이 충족되지 않는 경우(부동 형식인 피연산자가 없는 경우) 피연산자에 대한 정수 계열 변환이 다음과 같이 수행됩니다.If the above three conditions are not met (none of the operands are of floating types), then integral conversions are performed on the operands as follows:

    • 피연산자 중 하나가 unsigned long 형식인 경우 다른 피연산자가 unsigned long 형식으로 변환됩니다.If either operand is of type unsigned long, the other operand is converted to type unsigned long.

    • 위의 조건이 충족되지 않고 피연산자 중 하나가 long 형식이고 다른 피연산자는 unsigned int 형식인 경우 두 피연산자는 unsigned long 형식으로 변환됩니다.If the above condition is not met and either operand is of type long and the other of type unsigned int, both operands are converted to type unsigned long.

    • 위의 두 조건이 충족되지 않고 피연산자 중 하나가 long 형식인 경우 다른 피연산자는 long 형식으로 변환됩니다.If the above two conditions are not met, and either operand is of type long, the other operand is converted to type long.

    • 위의 세 조건이 충족되지 않고 피연산자 중 하나가 unsigned int 형식인 경우 다른 피연산자는 unsigned int 형식으로 변환됩니다.If the above three conditions are not met, and either operand is of type unsigned int, the other operand is converted to type unsigned int.

    • 위의 조건이 모두 충족되지 않는 경우 두 피연산자가 int 형식으로 변환됩니다.If none of the above conditions are met, both operands are converted to type int.

    다음 코드에서는 이러한 변환 규칙을 보여 줍니다.The following code illustrates these conversion rules:

float   fVal;  
double  dVal;  
int   iVal;  
unsigned long ulVal;  

dVal = iVal * ulVal; /* iVal converted to unsigned long  
                      * Uses step 4.  
                      * Result of multiplication converted to double   
                      */  
dVal = ulVal + fVal; /* ulVal converted to float  
                      * Uses step 3.  
                      * Result of addition converted to double   
                      */   

참고 항목See Also

C 연산자C Operators