내가 caspp을 읽을 때, overflow.so없이 인수를 추가 할 수 있는지 여부를 결정하는 질문이 있습니다. 코드를 씁니다."long long = int + int"먼저 계산 후 입력 하시겠습니까?
//sum1 is long long ,so there is no overflow.
//when sum2 is overflow ,then sum1 != sum2;
int tadd_ok (int x,int y)
{
long long int sum1 = x + y;
int sum2 = x + y;
return sum1 == sum2;
}
그러나 몇 가지 질문이 있습니다. x = -2147483647, y = -2라고 가정하면 sum1과 sum2가 모두 같음 2147483747 (오버플로!).
그리고 "long long = int + int"에 대해 먼저 계산 한 다음 유형을 변환 하시겠습니까? 이 규칙은 무엇입니까?
식을 평가하고, 나중에 할당. 모든 피연산자가'int' 인 한, 표현식은'int'로 평가됩니다. 게시 된 코드에서'int sum2 = x + y;'는'int sum2 = (int) sum1;'과 같습니다. – dxiv
C 및 C++ 표준 문서는 일반적인 판촉 및 변환시 명확합니다. 문제는 중간 크기의 합계가 적절한 크기 일 것이지만 두 개의 'int'유형을 추가하기 때문에 해당 변환이 보존되지 않습니다. 결과가 오랫동안 당신에게 올 것이라고 가정하기보다는 추가를 캐스팅해야합니다. –
'C'와'C++ '는 별개의 언어입니다. – sjsam