질문 : 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 :
- signed char:
- unsigned char:
- "plain" char: signed char 또는 unsigned char, 구현 정의됨
- signed short: -32767 to 32767
- unsigned short: 0 to 65535
- signed int: -32767 to 32767
- unsigned int: 0 to 65535
- signed long: -2147483647 to 2147483647
- unsigned long: 0 to 4294967295
- signed long long: -9223372036854775807 to 9223372036854775807
- unsigned long long: 0 to 18446744073709551615
C ++ (또는 C) 구현은 바이트 sizeof(type) 형식의 크기를 임의의 값으로 정의 할 수 있습니다.
- "size of (type) * CHAR_BIT" 는 필요한 범위를 포함할 수 있을 만큼 높은 비트 수로 평가됩니다.
- 형식 순서가 여전히 유효합니다 (e.g. sizeof(int) <= sizeof(long)).
이 모든 것을 종합하면 다음을 보장합니다.
char,signed char및unsigned char은 8 비트 이상입니다.signed short,unsigned short,signed int및unsigned int는 16 비트 이상입니다.signed long및unsigned long은 32 비트 이상입니다.signed long long및unsigned 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
'프로그래밍 언어 > C++' 카테고리의 다른 글
| 메서드가 Moq에서 호출되지 않았는지 확인하는 방법 (0) | 2021.07.27 |
|---|---|
| gcc의 C / C ++ 소스에서 assembler output 얻는 방법 (0) | 2021.07.27 |
| C ++ 컴파일이 오래 걸리는 이유 (0) | 2021.07.23 |
| Collatz 추측을 테스트하기위한 C ++ 코드가 손으로 작성한 어셈블리보다 빠르게 실행되는 이유 (0) | 2021.07.23 |
| C ++ 프로그래머가 'new'사용을 최소화해야하는 이유 (0) | 2021.07.23 |