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

C/C++ Q/A
[2766] Re:Re: 답변 감사드리구요. 다시 좀 봐주세요.
급해요 [] 1351 읽음    2003-06-15 09:56
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 라는 변수에는 3000정도의 수가 들어 있습니다.
: :
: : 거기에 1000을 곱했더니
: :
: : 그러니까..
: :
: : printf(" %d" , p * 1000 );
: :
: : 이상한 마이너스의 숫자가 나옵니다.
: :
: : printf 내에서 %d 로 정수를 표현할 때 단위에 걸리는 건가요??
: : 제가 잘못 쓴건가요???
: : 답이 틀리거든요.
: :
:
:
: P의 자료형이 무엇인가요?
: P의 자료형에 따라 결과가 달라집니다.
: 정확히 말하자면, 부호 있는 형인지 여부와 자료형의 크기가 동시에 작용하여 결과가 달라집니다.
:
: 일단 P에 대입하려는 값이 대략 3000(천단위라는 것만 인정) 이고 곱한 값은 정확이 1000인 것으로 보겠습니다.
: P가 int 형이고 int 형이 32비트라면 p의 signed 여부와는 상관 없이 저 결과는 절대 음수가 나오지 않습니다.
: P가 int 형이긴 하지만 int 형이 16비트라면 p의 signed 여부와는 상관 없이 저 결과는 음수가 나올 수 있습니다.
: P가 signed char 형이라면 int 형의 크기와 상관 없이 저 결과는 음수가 나올 수 있습니다.
: P가 unsigned char 형이고 int 형 크기가 16비트라면 저 결과는 음수가 나올 수 있습니다.
:
:
: 요는 이것입니다.
: 정수형인 경우(즉, 기본형 중에서 실수형이 아닌 경우)
: 1. 부호 있는 형이고 해당 자료형의 비트수가 N이라면  -2^N/2 ~ 2^N/2-1 의 수를 표시할 수 있음.
: 2. 부호 없는 형이고 해당 자료형의 비트수가 N이라면  0 ~ 2^N-1 의 수를 표시할 수 있음.
: 3. 1,2 모두 연산의 결과 또는 대입하는 값이 자료형의 비트수를 넘게 되면 자료형의 비트수 만큼의 LSB쪽 비트만 최종 결과로 남습니다.(예: char c=257; c에는 1이 대입됨, 257==0x0101)
: 3-1. 부호 있는 형인 경우 이 최종 결과로 부호가 결정됨
: 눈으로 보기엔 양수를 대입한 경우에도 1에 따라 음수가 될 수도 있음(예: char c=129; c의 값은 -127, 129는 2진수로 10000001, 최상위비트가 1이므로 음수이고 2의보수이므로 절대치는 127).
: 자료형의 크기가 작은 것과 큰 것 간에 연산을 하려 하면 큰 쪽으로 형을 통일한 후 연산합니다.
: 그리고, printf와 같은 출력 함수에서는 변수형의 signed 여부와 상관 없이 출력형지정자와 변수에 담긴 값의 크기에 따라 부호가 달라질 수 있습니다.
:
: char는 1바이트(8비트)이므로
: signed라면 -2^8/2 ~ 2^8/2-1 즉 -128~127의 수 표현 가능
: unsigned 라면 0~2^8-1 즉 0~255의 수 표현 가능
:
:
: int가 2바이트(16비트)인 경우
: signed라면 -2^16/2 ~ 2^16/2-1 즉 -32768~32767의 수 표현 가능
: unsigned 라면 0~2^16-1 즉 0~65535의 수 표현 가능
:
:
: int가 4바이트(32비트)인 경우
: signed라면 -2^32/2 ~ 2^32/2-1 즉 -2147483648~2147483647의 수 표현 가능
: unsigned 라면 0~2^32-1 즉 0~4294967295의 수 표현 가능
:
:

+ -

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