64bit형 변수사용시..

rokmn3309의 이미지

limits.h파일에 보면은
unsigned long long int형의 max값을 보면 184...ULL (20자리) 값이 정의되어 있는데
실제로 변수를 선언하고 값을 입력해봐도.. 10자리에서 짤려버리는데..
컴파일시에 옵션이 있나요???

<code>
int64_t k;
unsigned long long int k2;

k=120120034123776;
k2=120120034123776;

printf("%d\n",k);
printf("%d\n",2);

출력
k -1611210752
k2 -1611210752

</code>

gcc버전은 다음과 같습니다.
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)

rokmn3309의 이미지

sizeof로 크기를 구해봤을때..
sizeof(int64_t)는 8byte 즉 2에 64승이라고 나옵니다.

근데 실제로 값을 넣으면 sizeof(int) 이상은 오버플로 나버리는 이유가 뭔지..

pynoos의 이미지

printf 안의 %d, %ld, %lld 에 정확히 문법을 따져 주는 것이 compile 하는 것이 좋습니다.

long 형에 대한 것은 %ld 로 해주시고
long long 형은 %lld

unsigned long 은 %lu
unsigned long long 은 %llu

로 해주시어요...

-Wall

을 켜시면 gcc의 경우 printf 안의 인자와 넘기는 것에 대한 형 확인까지 해줍니다.

김성진의 이미지

한가지 더 빠진것이 있는듯 싶습니다.

printf일 경우에도 물론 조심해야하지만,
64비트 상수정의할 때도 조심하셔야 합니다.

위의 예에서는 그냥 상수를 정의하셨는데 뒤에 ULL혹은 LL
등을 붙여주시는게 portability측면에서 유리합니다.

특히, 이러한 것을 따지는 플랫폼에서는 소스코드는

문제가 없는데, 결과가 이상한 경우가 많이 발생합니다.

대부분의 경우 컴파일러가 컴파일 타임에 LONGLONG상수를
INT 상수로 잘라버리기 때문에 나타납니다.

그럼 이만.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.