Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2768] Re:Re:Re: 정수형 간의 연산
임문환.실업자 [] 1156 읽음    2003-06-15 15:15
급해요 님이 쓰신 글 :
: p는 int형입니다. sizeof를 해보니 크기가 2로 뜨네요. 2바이트인가 봅니다.
:
: int p= 3207;
: printf ( " %d ", p*1500/100);
:
: 을 하는 건데요.(실제로는 p를 구하는 과정은 따로 있습니다.)
: 계산 결사가 완전히 틀립니다. 옳게 하려면 어떻게 적어야 하는지 알려주세요.
: int p 에 문제가 있나 해서 long으로도 바꿔봤는데 똑같습니다.
: 결과값이 4만 단위로 나와야 하는데 263인가가 나옵니다-.-;
: 그리고 p*15 로 적을 떄와 p*1500/100 로 적을 때 답이 서로 틀리더군요.
: 그런 이유로 알려주시면 감사...^^
: 그럼~
:

곱셈과 나눗셈은 연산자 우선순위가 동일하고
명시적으로 우선순위를 변경(지정)해주지 않는 한 왼쪽에서 오른쪽으로 진행합니다.
따라서, p*1500/100 에서는 p*1500을 먼저 계산하고 그 결과를 100으로 나누게 됩니다.
p가 3207이므로 3207*1500=4810500
4810500은 2바이트(16비트)에는 다 담을 수 없어서 LSB쪽 16 개 비트의 내용만 남습니다.
(LSB쪽 16 개 비트의 값인 26372만 남음)
이 값을 100으로 나눕니다.
26372/100
정수형 간의 연산에는 결과도 정수형이고 나눗셈의 경우 소수점이하는 절사하므로 263이 결과값

그리고, long int 형은 4바이트 아니던가요? 이상하네요.
아래 두가지 중 하나로 하면 이상 없이 될겁니다.
(int)(p*(1500.0/100.0));
또는
p*(long)1500/100; //long이 2바이트라면 틀린 결과가 나옴.

그리고 printf 함수에서, unsigned로 표시하고 싶다면 형지정 문자에 u를 지정해주어야 합니다.





+ -

관련 글 리스트
2764 급합니다. 쉬운 건데 틀리네요. 단순 질문입니다. 급합니다. 1145 2003/06/15
2765     Re: 정수형 간의 연산 임문환.실업자 1268 2003/06/15
2766         Re:Re: 답변 감사드리구요. 다시 좀 봐주세요. 급해요 1095 2003/06/15
2768             Re:Re:Re: 정수형 간의 연산 임문환.실업자 1156 2003/06/15
2770                 Re:Re:Re:Re: 이런 여전히 안 됩니다...ㅡ.ㅡ; 급합니다. 1030 2003/06/15
2771                     Re:Re:Re:Re:Re: 이런 여전히 안 됩니다...ㅡ.ㅡ; 임문환.실업자 1145 2003/06/15
2772                         Re:Re:Re:Re:Re:Re: 됩니다~! 급합니다. 1098 2003/06/15
2773                             Re:Re:Re:Re:Re:Re:Re: 됩니다~! 임문환.실업자 1233 2003/06/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.