급해요 님이 쓰신 글 :
: 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를 지정해주어야 합니다.
|