C++에서 64비트 정수 지정

Abdul Mateen 2023년10월12일
C++에서 64비트 정수 지정

오늘의 자습서에서는 C++에서 64비트 정수를 지정하는 방법에 대해 논의하고 배웁니다. 또한 64비트 정수를 사용하는 데 문제가 있었던 이전 방법을 비교할 것입니다.

C++에서 64비트 정수 지정

C++에서 정수를 처리하기 위한 여러 가지 선택 사항이 있습니다. int 데이터 유형에서 시작하여 long intlong long int(64비트)까지 다음 코드를 사용하여 크기를 확인할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
  long long int v;
  cout << sizeof(v) << '\n';
  return 0;
}

출력은 8바이트 또는 64비트입니다. 다음 코드를 사용하여 long long int가 처리할 수 있는 최대값을 비교해 봅시다.

#include <iostream>
using namespace std;

int main() {
  long long int v = 9223372036854775807;
  cout << sizeof(v) << '\n';
  cout << v << '\n';
  return 0;
}

출력은 9223372036854775807이며 8바이트입니다. 그러나 v 값을 늘리면 정수 상수가 너무 커서 부호가 없습니다라는 오류가 발생합니다.

9223372036854775807이 올바르게 처리되는 양수 값의 최대 범위임을 의미합니다. 이 숫자를 16진수로 변환하면 값은 7FFFFFFFFFFFFFFF입니다.

이는 부호 비트를 제외한 모든 비트 1이 있음을 의미합니다. 마찬가지로 음수 정수의 최대 범위는 -9223372036854775808입니다.

따라서 64비트 정수에는 문제가 없는 것 같습니다. 그러나 과거에는 많은 프로세서가 64비트 정수를 처리할 수 없었습니다. 따라서 동일한 코드가 잘못된 출력을 제공했습니다.

예를 들어 다음 정보를 저장하려고 할 때 오류 메시지가 표시되었습니다. 코드 및 관련 오류 메시지를 참조하십시오.

long long int h2 = 0x4444000044444;

오류 메시지는 다음과 같습니다.

warning: overflow in implicit constant conversion
warning: integer constant is too large for its type

long long int 외에도 stdint.h에서 사용할 수 있는 다른 유형인 int64_t가 있습니다. 다시 말하지만 크기를 확인하면 8 바이트 또는 64 비트를 얻게 됩니다. 그러나 결과는 동일합니다.

토론은 과거에 C++에서 64비트 정수를 사용하는 동안 문제가 있었다는 결론을 내립니다. 컴파일러와 아키텍처에 따라 다릅니다. 그러나 이 문제는 현재 최신 컴파일러 버전에는 존재하지 않습니다.

long long int 또는 int64_t에서 64비트 정수를 안전하게 처리할 수 있습니다. 이러한 유형은 값을 저장할 뿐만 아니라 결과가 64비트 이내인 경우 수학 연산도 수행할 수 있습니다.

관련 문장 - C++ Integer