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

C/C++ Q/A
[2770] Re:Re:Re:Re: 이런 여전히 안 됩니다...ㅡ.ㅡ;
급합니다. [] 1030 읽음    2003-06-15 17:03
설명 잘 들었습니다.
윈도우용 컴파일러인데
int는 2바이트, long 4바이트로 인식되고 있습니다.
16비트 모드로 돌아가고 있는 거 같은데 이건 왜 그럴까요?

중요한 건,
제시해주신 방법으로 해봤는데 여전히 안 된다는 겁니다.
printf에서 32767 이상의 수는 받아들여지지 않고 있는 거 같습니다.
3207*10은 되는데 3207*11은 딴 수가 나오는 걸로 봐서요.

지금 유일하게 되는 건
1500/100 을 15로 바로 넣어서
unsigned int 로 p를 선언한 후
p * 15 는 나옵니다.
이건 65534 범위 안에 있어서 그런 거 같습니다.(printf에서 %u로 하구요.)

p * 1500 / 100 이런 식으로 써야 하는데...
어떻게 해야 할런지요? 




임문환.실업자 님이 쓰신 글 :
: 급해요 님이 쓰신 글 :
: : 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바이트 아니던가요? 이상하네요.
: 아래 두가지 중 하나로 하면 이상 없이 될겁니다.
: 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: 정수형 간의 연산 임문환.실업자 1157 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.