logo

확장 정수형(C/C++에서 올바른 정수 크기 선택)

C/C++에는 기본 정수 데이터 유형(char short int long 및 long long)에 대한 정의가 매우 느슨합니다. 언어는 최소한 일정 범위의 값을 나타낼 수 있음을 보장하지만 특정 플랫폼(컴파일러 운영 체제 하드웨어)은 그보다 클 수 있습니다.
좋은 예는 길다. 한 머신에서는 32비트(C에서 요구하는 최소값)일 수 있습니다. 다른 하나는 64비트입니다. 정확히 32비트 길이의 정수 유형을 원한다면 어떻게 합니까? 이것이 int32_t가 들어오는 곳입니다. 이는 특정 시스템이 가지고 있는 정수 유형이 정확히 32비트인 것에 대한 별칭입니다.
주형: 
 

  intN_t or uintN_t   Where N is width of integer which can be 8 16 32 64 or any other type width supported by the library.


 



CPP
// C++ program to show use of extended integral types #include    using namespace std; int main() {  uint8_t i; // i with width of exact 8 bits  // Minimum value represented by unsigned 8 bit is 0  i = 0;  cout << "Minimum value of it: "<< (int)i << endl;  // Maximum value represented by unsigned 8 bit is 255  i = 255;  cout << "Maximum value of it: "<< (int)i << endl;  // Warning: large integer implicitly truncated to  // unsigned type. It will print any garbage value  i = 2436;  cout << "Beyond range value of it: " << (int)i << endl;  return 0; } 

산출: 
 

 In function 'int main()': 19:7:   warning  : large integer implicitly truncated to unsigned type [-overflow] i = 2436; ^ Minimum value of i : 0 Maximum value of i : 255 Beyond range value of i : 132


다양한 변형  
1. 고정 폭 부호 없는 8비트 정수: uint8_t  
이는 정확히 8비트의 부호 없는 int를 제공한다는 의미입니다.
2. 최소 너비 부호 없는 8비트 정수: uint_least8_t  
이는 최소 8비트를 갖는 가장 작은 유형의 unsigned int를 제공한다는 의미입니다. 메모리 소비에 최적화되었습니다.
3. 가장 빠른 최소 너비의 부호 없는 8비트 정수: uint_fast8_t  
이는 내 프로그램을 더 빠르게 만들 수 있는 최소 8비트의 서명되지 않은 int를 제공한다는 의미입니다. 정렬 고려사항으로 인해 더 큰 데이터 유형을 선택할 수 있습니다. 속도에 최적화되었습니다.
따라서 uint8_t의 너비는 정확히 8비트가 보장됩니다. uint_least8_t는 최소 8비트 너비가 보장되는 가장 작은 정수입니다. uint_fast8_t는 최소 8비트 너비가 보장되는 가장 빠른 정수입니다. 
그래서 확장된 적분 유형은 우리가 글을 쓰는 데 도움이 됩니다. 가지고 다닐 수 있는 그리고 효율적인 암호.