2010-04-15 3 views
5

6.3.1.8p1 : 그렇지 않은 경우 정수 승격은 두 피연산자에서 모두 입니다. 그런 다음 승격 된 피연산자에 다음 규칙이 적용됩니다. 두 피연산자 모두 동일한 유형이 있으면 더 이상 변환 할 필요가 없습니다. 그렇지 않으면 두 피연산자 모두 부호있는 정수 유형을 가지고 있거나 모두 부호없는 정수 유형을 갖는 경우 더 낮은 정수 변환 순위 유형의 피연산자는 더 높은 순위의 피연산자 유형으로 변환됩니다. 부호없는 정수 유형의 피연산자가 다른 피연산자 유형의 순위보다 크거나 같은 경우 부호있는 정수 유형의 피연산자는 부호없는 정수 유형의 피연산자 유형으로 변환됩니다. 그렇지 않으면 부호있는 정수 유형의 피연산자 유형이 부호없는 정수 유형의 피연산자 유형의 모든 값을 나타낼 수있는 경우 부호없는 정수 유형의 피연산자가 부호있는 정수 유형의 피연산자 유형으로 변환됩니다 . 그렇지 않으면 두 피연산자 모두 부호 유형 정수 유형의 피연산자 유형에 해당하는 부호없는 정수 유형으로 변환됩니다. 굵게 규칙에 대한마지막 정수 승격 규칙은 C에서 어떻게 적용됩니까?

은 당신이 순위의 부호없는 정수 타입이 부호있는 정수 유형이 모든 물을 수 없습니다 부호있는 정수 타입보다 작은이 있어야합니다 암시하는 것 같다 적용 할 부호없는 정수 유형의 값.

이러한 사례에 대한 실제 사례가 있습니까? 아니면 가능한 모든 순열을 다루기 위해 포괄적 인 역할을하는이 문장입니까?

답변

5

플랫폼이 sizeof(long int)==sizeof(int) 인 경우 signed long intunsigned int이이 규칙에 해당됩니다. 어떤 경우이 표준은 변환 순위가 크기와 동등한 것으로 지정하지 않으며 해당 전환 순위 만 크기에 대한 유효한 주문 (6.3.1.1.p1.1 (SP?))을 제공합니다.

두 개의 부호있는 정수 유형은 동일한 표현을 가지고 있더라도 동일한 순위를 가져야합니다.

+1

이 경우 'long'은 'unsigned int'보다 큰 등급이지만 모든 값을 나타낼 수 없으므로 두 피연산자 모두 'unsigned long'으로 변환됩니다. 즉, '-1L * 1U'는 큰 양수가 될 것입니다. – caf

관련 문제