Seunghyun Yoo

Posts | Development | About

[KR] compareTo

Sample Code:

#include <stdio.h>

void cmp(int a, int b){
    printf("a=%d, b=%d, a-b=%d, a>b=%d\r\n", a, b, a-b, a>b);
}

int main(int argc, char* argv[]){
    cmp(2,-1);
    cmp(5,-1);
    cmp(2147483648-1, -1);
    return 0;
}

Result:

a=2, b=-1, a-b=3, a>b=1
a=5, b=-1, a-b=6, a>b=1
a=2147483647, b=-1, a-b=-2147483648, a>b=1

a가 signed integer고 a-b의 값을 바로 사용하게 된다면 첫 번째, 두 번째의 경우는 overflow가 발생하지 않아 >0 이라는 조건을 만족한다. 그런데 세번째는 부호가 바뀌게 된다. 그렇다면 (양수)라는 조건을 만족시킬 수 없게 된다. 어떻게 Java에서 이를 처리하는지 모르겠다. unsigned 라면 큰 문제는 없어 보인다. compareTo 함수 자체에는 signed나 unsigned에 대한 제약 조건은 없는 것은 함정…

음… 그리고 나 역시 지식을 전달할 때 최대한 오류가 없도록 해야겠고, double check를 해야겠다. 돌다리도 두드려보고 건너가라는 옛 속담이 다시 떠오르는 하루였다.