더북(TheBook)

여섯 번째와 일곱 번째 연산은 좀 심각한 문제가 발생한다. UINT_MAXLONG_MAX인 플랫폼에서는 0U0L로 변환된다. 그래서 여섯 번째 연산의 결과는 true가 된다. LONG_MAX < UINT_MAX인 플랫폼에서는 -1L-1U(즉, UINT_MAX)로 변환되어 여섯 번째 연산의 결과는 false가 된다. 일곱 번째 연산도 마찬가지다. 하지만 여섯 번째 연산과 일곱 번째 연산의 결과가 얼마든지 달라질 수 있으니 주의해야 한다.

마지막 두 예제와 같은 비교 연산에 대해 부호 없는 타입이 적합한지 아니면 부호 있는 타입이 적합한지에 대해 아직도 논쟁 중이다. 한 가지 확실한 것은 부호 있는 피연산자와 부호 없는 피연산자가 섞이면 그 의미가 분명하지 않을 때가 있다는 것이다. 암묵적으로 변환할 때 둘 중 어느 타입을 따르더라도 문제가 발생할 가능성은 있다.

TAKEAWAY 5.32 부호가 서로 다른 피연산자에 대한 연산은 피한다.

TAKEAWAY 5.33 가능하면 부호 없는 타입을 사용한다.

TAKEAWAY 5.34 산술 연산을 표현할 때는 암묵적으로 변환되더라도 문제가 없는 타입을 사용한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.