C언어, 정수 진급과 관련된 문제..
글쓴이: gurumong / 작성시간: 수, 2009/01/21 - 6:33오후
책에서 보고 급하게 입력해서 컴파일해서 실행해봤는데
-1값을 가지는 변수 i가
+1값을 가지는 변수 ui 보다 크다는 Huh? 문자열을 출력하네요
int i = -1; unsigned int ui = 1; if (i > ui) puts("Huh?");
책에서는 이것에 대해 설명을 하고있는데 읽어보아도 잘 이해하지 못하겠습니다 ㅜ.ㅜ
평소에 이런 문제가 생길수 있음을 전혀 몰랐었고 결과도 상식적이지 않기에
갑자기 이전에 공부를 하면서 작성했던 제 프로그램을 믿을수 없을 정도로 좀 충격적인데요
이런 문제를 예방하려면 어떻게 해야하는것인가요?
무부호, 유부호 정수형을 대소비교에 같이 사용하지만 않는다면 이런 비상식적인 문제가 생기지 않는것인가요?
Forums:
이진수에서 음수는
이진수에서 음수는 2의보수를 사용하여 표현하기 때문에 저런 문제가 발생할 수 있습니다.
위에서 i = ffff 이고 ui=0001입니다
if문 안에서 비교문을 실행할 때 i가 unsigned로 캐스팅 되나보네요(확인필요)
컴파일 시 -Wall 켜놓으면 경고가 뜰 거 같은데요(확인필요)...
=============================
As with all creative arts, the most effectie way to become a master is to imitate the mind-set of masters not just intellectually but emotionally aas well - Eric Steven Raymond.
=============================
fakesunfish@gmail.com
같은 사이즈의
같은 사이즈의 변수에 대해 unsigned 와 signed 만이 다를 경우
둘다 unsigned 로 casting 이 되어 비교가 됩니다.
위에 분 말씀대로 ffff 가 더 큰값이 되어버리지요.
( 반드시 주의하셔야할 사항입니다. )
Neogeo - Future is Now.
Neogeo - Future is Now.
댓글 달기