반응형
알고리즘 문제 해결전략 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캐스팅을 조심하는게 좋다