승격 규칙이 혼합 부호 유형의 이진 연산자 산술을 제어하는 방법
다음 코드를 고려하세요.
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
연산자는 결과를 2147483648로 계산하며 unsigned int를 제안합니다. 반환 유형으로. 반대로 다음 코드에서는
unsigned int us = 42; int neg = -43; int result = us + neg;
결과가 -1이며 이는 int 반환 유형을 나타냅니다.
승격 규칙 해결
C 표준은 산술 이진 연산자에 대한 특정 승격 규칙을 정의합니다(C §5/9):
다음에 대한 의미 예
두 예 모두에서 프로모션 규칙은 연산자 계산을 위한 unsigned 유형.
예 1: max와 one 모두 unsigned int로 승격되어 반환 유형이 unsigned int가 됩니다.
예시 2: 승격 규칙은 int와 unsigned int 사이의 확실한 승자를 지정하지 않습니다. 그러나 부호 없는 유형이 선택되어 결과에 대해 부호 없는 오버플로가 발생합니다. 결과는 궁극적으로 int에 할당되므로 결과 값은 C §4.7/3에 따라 정의되지 않습니다.
위 내용은 C 승격 규칙은 부호 있는 정수 유형과 부호 없는 정수 유형이 혼합된 이진 산술 연산자의 반환 유형을 어떻게 결정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!