IT이야기

c에서 64비트 정수를 지정하는 방법

cyworld 2022. 6. 17. 21:49
반응형

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_tC99 입니다.

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 long64번입니다.

today today today today today today today today today today today 。long long는 64비트를 지정합니다.long long64비트 이상이어야 합니다.따라서 를 사용하여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

반응형