아래 코드가 제대로 안찍히는 이유를 설명해 주실분
^^:;
main() { long y; unsigned long long int x; y = 1129622404; x = y * 1000; printf("'%d'\n", y); printf("'%lld'\n", x); }
x = (unsigned long long)y * 1000; ... printf("'%llu'\n", x);
로 고치면 제대로 찍히네요.
x = y * 1000 에서 overflow 가 난 결과가 저장되는 듯 합니다..
흠.. 그렇겠군요.. 일단 둘다 long이니 연산에서 임시로 long에다가 계산 결과를 저장하여 overflow가 날 테고.. 그걸 다시 long long으로 저장하겠군요.. 둘 중 하나라도 먼저 형변환 해준다면 임시로 long long에다가 계산해 줄테니 해결! 아니면 아래와 같은 방법도 OK!
x = y; x *= 1000;
ㅡ_ㅡ;
x = y * 1000LL; ... printf("'%llu'\n", x);
이렇게 해도 바른 결과가 찍히는 군요. 이유는 위의 설명대로인듯 합니다. 적어두.. 개산되는 하나의 변이 longlong이 되어야 하는 모양이군요.
printf("%Lu",ll); 아닌가요?
printf("'%d'\n", y);
printf("\'%ld\'\n", y);
PS.
int main() 과 int main(int, char **) 이외의 main 형식은 ISO/IEC 9899:1999 (약칭 C99) 에서 보장하지 못합니다.
Real programmers /* don't */ comment their code. If it was hard to write, it should be /* hard to */ read.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
[code:1]x = (unsigned long long
로 고치면 제대로 찍히네요.
x = y * 1000 에서 overflow 가 난 결과가 저장되는 듯 합니다..
흠.. 그렇겠군요..일단 둘다 long이니 연산에서 임시로 long에
흠.. 그렇겠군요..
일단 둘다 long이니 연산에서 임시로 long에다가 계산 결과를 저장하여 overflow가 날 테고..
그걸 다시 long long으로 저장하겠군요..
둘 중 하나라도 먼저 형변환 해준다면 임시로 long long에다가 계산해 줄테니 해결!
아니면 아래와 같은 방법도 OK!
ㅡ_ㅡ;
[code:1]x = y * 1000LL;...printf&#
이렇게 해도 바른 결과가 찍히는 군요.
이유는 위의 설명대로인듯 합니다.
적어두.. 개산되는 하나의 변이 longlong이 되어야 하는 모양이군요.
원칙은
printf("%Lu",ll);
아닌가요?
[quote="하하"]printf("'%d'\n", y);[/quote]
printf("\'%ld\'\n", y);
PS.
int main() 과 int main(int, char **) 이외의 main 형식은
ISO/IEC 9899:1999 (약칭 C99) 에서 보장하지 못합니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
댓글 달기