프로그래밍 언어/C++

C ++ 표준 int, long 유형의 크기 기준

Rateye 2021. 7. 27. 10:28
728x90
반응형

 

질문 : C ++ 표준은 int, long 유형의 크기를 무엇으로 지정합니까?

기본 C ++ 유형의 크기에 대한 자세한 정보를 찾고 있습니다. 아키텍처 (16 비트, 32 비트, 64 비트)와 컴파일러에 따라 다르다는 것을 알고 있습니다.

하지만 C ++에 대한 표준이 있습니까?

32 비트 아키텍처에서 Visual Studio 2008을 사용하고 있습니다. 내가 얻는 것은 다음과 같습니다.

char  : 1 byte
short : 2 bytes
int   : 4 bytes
long  : 4 bytes
float : 4 bytes
double: 8 bytes

char , short , int , long , double , float (및 내가 생각하지 않은 다른 유형)의 크기를 나타내는 신뢰할 수있는 정보를 찾으려고 노력했습니다.

반응형
답변

C ++ 표준은 정수 유형의 크기를 바이트로 지정하지 않지만 보유 할 수 있어야하는 최소 범위를 지정합니다. 필요한 범위에서 최소 크기 (비트)를 추론 할 수 있습니다. 그로부터 바이트 단위의 최소 크기와 바이트 의 비트 수CHAR_BIT 매크로의 값을 추론 할 수 있습니다. 가장 모호한 플랫폼을 제외하고는 모두 8이고 8보다 작을 수 없습니다.

char 에 대한 한 가지 추가 제약은 크기가 항상 1 바이트 또는 CHAR_BIT 비트 (따라서 이름)라는 것입니다. 이것은 표준에 명시되어 있습니다.

C 표준은 C ++ 표준에 대한 표준 참조 이므로 이러한 요구 사항을 명시 적으로 설명하지 않더라도 C ++에는 C 표준 (22 페이지)에서 요구하는 최소 범위가 필요합니다. MSDN :

  1. signed char:
  2. unsigned char:
  3. "plain" char: signed char 또는 unsigned char, 구현 정의됨
  4. signed short: -32767 to 32767
  5. unsigned short: 0 to 65535
  6. signed int: -32767 to 32767
  7. unsigned int: 0 to 65535
  8. signed long: -2147483647 to 2147483647
  9. unsigned long: 0 to 4294967295
  10. signed long long: -9223372036854775807 to 9223372036854775807
  11. unsigned long long: 0 to 18446744073709551615

C ++ (또는 C) 구현은 바이트 sizeof(type) 형식의 크기를 임의의 값으로 정의 할 수 있습니다.

  1. "size of (type) * CHAR_BIT" 는 필요한 범위를 포함할 수 있을 만큼 높은 비트 수로 평가됩니다.
  2. 형식 순서가 여전히 유효합니다 (e.g. sizeof(int) <= sizeof(long)).

이 모든 것을 종합하면 다음을 보장합니다.

  • char , signed charunsigned char 은 8 비트 이상입니다.
  • signed short , unsigned short , signed intunsigned int 는 16 비트 이상입니다.
  • signed longunsigned long 은 32 비트 이상입니다.
  • signed long longunsigned long long 은 64 비트 이상입니다.

double float 만큼의 정밀도를 제공한다는 점을 제외하고 float 또는 double 크기에 대해 보장되지 않습니다.

실제 구현 특정 범위는 C의 <limits.h> 헤더 또는 C ++의 <climits> <limits> std::numeric_limits )에서 찾을 수 있습니다.

int 최대 범위를 찾는 방법은 다음과 같습니다.

C :

#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;

C ++ :

#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();

 

출처 : https://stackoverflow.com/questions/589575/what-does-the-c-standard-state-the-size-of-int-long-type-to-be
728x90
반응형