C++에서 64비트 정수 지정
오늘의 자습서에서는 C++에서 64비트 정수를 지정하는 방법에 대해 논의하고 배웁니다. 또한 64비트 정수를 사용하는 데 문제가 있었던 이전 방법을 비교할 것입니다.
C++에서 64비트 정수 지정
C++에서 정수를 처리하기 위한 여러 가지 선택 사항이 있습니다. int
데이터 유형에서 시작하여 long int
및 long 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비트 이내인 경우 수학 연산도 수행할 수 있습니다.