2014-12-01 7 views
1

부호없는 정수 변수에 부호없는 두 정수 변수의 차이를 저장하는 데 문제가 있습니까? 부호없는 변수의 차이점을 부호있는 변수에 저장

아래의 예를 생각해 서명 변수가 프로그램에서 나중에 사용하는 경우

#include <stdio.h> 

int main() 
{ 
    unsigned int a, b, d1; 
    signed int d2; 

    a = 20; 
    b = 200; 

    d1 = a - b; 
    d2 = a - b; // Line 1 

    printf("d1 = %u\n", d1); 
    printf("d2 = %d\n", d2); 

    return 0; 

} 

를, 잠재적 인 문제가?

+1

당신이 A' 또는'b''에서 INT_MAX''보다 큰 값을 저장하는 경우에만. – potrzebie

답변

2

예, 오버플로 할 수 있습니다.

2 개의 부호없는 정수의 차이는 부호없는 정수와 같을 수 있으며 동일한 유형의 부호있는 정수에 맞지 않습니다. [음수로 랩핑하지 않는 한, 그럴 싶지 않아.]

쉽게 테스트 케이스로 확인할 수 :

a = unsigned Int max; 
b = 0; 
+0

@ Mitch : 테스트 사례를 이해하지 못했습니다. 그것에 대해 자세히 설명해 주시겠습니까? –

+1

부호없는 최대 값 = 2 * (부호있는 최대 값) (1을 주거나 가져옴) –