|
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의 수 표현 가능
:
:
|