c에서 64비트 정수를 지정하는 방법
C에서 64비트 정수를 사용하려고 하는데, 이것이 가능한지 아닌지에 대한 혼합 신호가 나오고 있습니다.
printf 실행 시:
printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));
답변은 다음과 같습니다.
롱 int 사이즈 : 4 롱 int 사이즈 : 8
이를 통해 롱 int는 8바이트 = 64비트임을 알 수 있습니다.
다만, 다음의 변수를 선언하려고 하면,
long long int a2 = 0x00004444;
long long int b2 = 0x000044440;
long long int c2 = 0x0000444400;
long long int d2 = 0x00004444000;
long long int e2 = 0x000044440000;
long long int f2 = 0x0000444400004;
long long int g2 = 0x00004444000044;
long long int h2 = 0x000044440000444;
long long int i2 = 0x0000444400004444;
마지막 4개의 변수(f2,g2,h2,i2)에 의해 다음 오류 메시지가 나타납니다.
경고: 정수 상수가 '긴' 유형에 비해 너무 큽니다.
long long int를 int64_t로 대체해도 같은 결과가 나옵니다.int64_t는 자체 에러 메시지를 생성하지 않았기 때문에 인식되었다고 생각합니다.
8바이트 길이의 int는 실제로 6바이트 길이의 int인 것 같습니다.여기서 뭘 놓쳤는지 모르겠어요.도움이 될 것 같으면 gcc 컴파일러에 대한 정보를 다음에 제시하겠습니다.
me@ubuntu:~$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v
--with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++
--prefix=/usr
--program-suffix=-4.4
--enable-shared
--enable-multiarch
--enable-linker-build-id
--with-system-zlib
--libexecdir=/usr/lib
--without-included-gettext
--enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4
--libdir=/usr/lib
--enable-nls
--with-sysroot=/ -
-enable-clocale=gnu
--enable-libstdcxx-debug
--enable-objc-gc
--enable-targets=all
--disable-werror
--with-arch-32=i686
--with-tune=generic
--enable-checking=release
--build=i686-linux-gnu
--host=i686-linux-gnu
--target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
64비트 정수에 접근할 수 있는 방법을 알고 계신 분이 계시다면 정말 감사하겠습니다.감사합니다.
stdint.h
정수 데이터 유형의 특정 크기에 대해 그리고 정수 리터럴 상수에 적절한 접미사를 사용합니다. 예를 들어 다음과 같습니다.
#include <stdint.h>
int64_t i2 = 0x0000444400004444LL;
해 보다LL
컴파일러가 해석의 일부로서 중간 타입에 할당하고 있을 가능성이 있습니다.http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html 를 참조해 주세요.
long long int i2 = 0x0000444400004444LL;
제로를 하고 있기 에, 「0」은 「0」으로 합니다.0x000044440000
되어가고 있다0x44440000
가능한 32비트보다 앞의 되지 않습니다f2
를 참조해 주세요.
int64_t
C99 입니다.
int64_t var = 0x0000444400004444LL;
인쇄의 경우:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
printf("blabla %" PRIi64 " blabla\n", var);
c에서 64비트 정수를 지정하는 방법
일반적인 좋은 아이디어에 반하여 추가하다LL
.
★★★LL
정수 상수까지 타입이 적어도 다음 크기만큼 넓어지도록 합니다.long long
정수 정수가 8진수 또는 16진수일 경우 정수는unsigned long long
필요한 경우.
너무 넓은 타입을 지정할 필요가 없는 경우는, OK.그렇지 않은 경우는, 계속 읽어 주세요.
long long
64번입니다.
today today today today today today today today today today today 。long long
는 64비트를 지정합니다.long long
64비트 이상이어야 합니다.따라서 를 사용하여LL
미래에는 예를 들어 128비트 숫자를 지정하는 코드가 될 수 있습니다.
C에는 다음 경우 유형이 될 정수 상수에 대한 매크로가 있습니다.int_least64_t
#include <stdint.h>
#include <inttypes.h>
int main(void) {
int64_t big = INT64_C(9223372036854775807);
printf("%" PRId64 "\n", big);
uint64_t jenny = INT64_C(0x08675309) << 32; // shift was done on at least 64-bit type
printf("0x%" PRIX64 "\n", jenny);
}
산출량
9223372036854775807
0x867530900000000
64비트(long long int)의 경우 16진수 접미사에 ll, 부호 없는 64비트(unsigned long long)의 경우 Ull 접미사를 추가합니다.
언급URL : https://stackoverflow.com/questions/9606455/how-to-specify-64-bit-integers-in-c
'IT이야기' 카테고리의 다른 글
페이지를 로드할 때 Nuxt JS Vuex 설정 데이터가 실시간으로 반영되지 않음 (0) | 2022.06.17 |
---|---|
컴파일러 경고 - 할당 주위에 진실 값으로 사용되는 괄호를 제안합니다. (0) | 2022.06.17 |
FolderBrowserDialog 대화 상자가 선택한 폴더로 스크롤되지 않는 이유는 무엇입니까? (0) | 2022.06.17 |
구성 요소 페이지 Vue로 푸시할 때 재귀 발생 (0) | 2022.06.17 |
vue-cli 앱의 node_modules에서 js 파일 가져오기 (0) | 2022.06.17 |