질문 : 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 |