반응형

알고리즘 문제 해결전략 1편 발췌

 

예전에 해당 책을 읽다 기억에 오래 남았던 문제 한가지가



해당문제다 결과값이  ㅡ2 이여야 할거같지만
위 이미지처럼 4294967294가 나온다.

해당값이 나오는 이유를 아래를 보기전에 생각해보자




a: unsigned char   , b: short
                   (a  + b ) :int    *  c : int
         (a+b) *c : int  + d unsigned int
           (a+b)*c+d : unsigned int

마지막 전체 수식의 답을 계산하는부분.
 d를 더하면서 전체 수식이 부호없는 정수형으로 변환 되는데 

-2 는 자료형에 담기에 너무작은 값이기 때문에 오버플로우가 일어나
값이 강제로 부호없는 정수로 캐스팅 되는 과정에서 큰값이 된다.

그렇기때문에 문제처럼 
unsigned를 쓸때 auto캐스팅을 조심하는게 좋다

+ Recent posts