C++에서 128비트 정수 사용
이 자습서에서는 C++의 128비트 정수에 대해 설명합니다. 또한 이것이 필요한 이유와 C++에서 가능한 대안에 대해서도 알아봅니다.
C++에서 128비트 정수 사용
C++에서 정수를 처리하기 위한 여러 가지 선택 사항이 있습니다. int
데이터 유형에서 long
, long int
및 long long int
까지 64비트이며 저장할 수 있는 최대 양수는 9223372036854775807
(16진수 7FFFFFFFFFFFFFFF
)입니다.
16진수로 7
을 고려하십시오. 다음으로 기호 비트가 켜져 있음을 의미하는 이진수 1000
을 갖는 8
이 있습니다. 마지막으로 -1
에서 -9223372036854775808
까지의 음수 정수가 있습니다. 9223372036854775807
은 많은 저장 및 산술 연산 요구 사항을 처리하기에 충분히 큰 숫자입니다.
C++에서 128비트 정수의 중요성 및 대안
이제 더 큰 정수가 필요한 경우 문제는 해당 정수에 대해 산술 연산을 수행하고 싶습니까? 대답이 예인 경우 128비트보다 더 많은 스토리지가 필요할 수 있습니다.
두 개의 큰 정수를 더하거나 곱한 결과에는 더 많은 비트가 필요할 수 있습니다. 따라서 이 경우 큰 정수를 구현하는 것이 도움이 될 수 있습니다.
마지막으로, 저장 용도로 128비트 정수가 필요한 경우 하나의 해결책은 두 개의 64비트 정수로 이루어진 구조체를 생성하는 것이거나, 8
개 요소의 int
배열이나 16
개 요소의 char
배열을 사용하는 것입니다.
그러나 GCC는 int128_t
인 128비트 정수에 대한 특정 데이터 유형을 제공합니다. 지원되는 컴파일러에서 크기를 확인할 수 있습니다.
int128_t var;
cout << sizeof(var) << '\n';
출력은 16
이며 이는 16x8=128비트
를 의미합니다.
그러나 128비트를 보유할 수 있는 특정 프로세서에 대해서는 지원됩니다. 그렇지 않으면 큰 정수를 저장하려고 하면 컴파일러에서 다음 경고 중 하나를 생성합니다.
warning: overflow in implicit constant conversion
warning: integer constant is too large for its type
토론의 결론은 최악의 경우에 필요한 비트 수를 정확하게 결정하는 것입니다.
또한 데이터만 저장하시겠습니까, 아니면 산술 연산을 수행하시겠습니까? 그런 다음 산술 연산을 수행하려는 경우 Big Integer 구현이 솔루션입니다.
Big Integer 구현의 경우 500비트나 5000비트도 걱정할 필요가 없습니다.
스토리지만 수행하려는 경우 다른 솔루션을 사용할 수 있습니다. 두 개의 64비트 데이터 멤버 구조를 사용하거나 int
데이터 유형 또는 char
데이터 유형의 배열을 사용하십시오.