내가 틀렸다면 정정 해줘
int는 4 바이트이며 -2,147,483,648에서 2,147,483,647 (2 ^ 31) 사이
의 값 범위는 4 바이트이며 -2,147,483,648에서 2,147,483,647 (2 ^ 31) 사이의 값 범위는 4 바이트입니다.
C ++의 차이점은 무엇입니까? 서로 바꿔서 사용할 수 있습니까?
답변
구현에 따라 다릅니다.
예를 들어 Windows에서는 동일하지만 Alpha 시스템에서는 long이 64 비트 인 반면 int는 32 비트입니다. 이 문서 에서는 가변 플랫폼에서 인텔 C ++ 컴파일러에 대한 규칙을 다룹니다. 요약:
OS arch size
Windows IA-32 4 bytes
Windows Intel 64 4 bytes
Windows IA-64 4 bytes
Linux IA-32 4 bytes
Linux Intel 64 8 bytes
Linux IA-64 8 bytes
Mac OS X IA-32 4 bytes
Mac OS X Intel 64 8 bytes
답변
유일한 보장은 다음과 같습니다.
sizeof(char) == 1
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
// FROM @KTC. The C++ standard also has:
sizeof(signed char) == 1
sizeof(unsigned char) == 1
// NOTE: These size are not specified explicitly in the standard.
// They are implied by the minimum/maximum values that MUST be supported
// for the type. These limits are defined in limits.h
sizeof(short) * CHAR_BIT >= 16
sizeof(int) * CHAR_BIT >= 16
sizeof(long) * CHAR_BIT >= 32
sizeof(long long) * CHAR_BIT >= 64
CHAR_BIT >= 8 // Number of bits in a byte
참조 : 최소 32 비트 가 long
보장됩니까?
답변
x64 용으로 컴파일 할 때 int와 long의 차이는 사용하는 컴파일러에 따라 0 ~ 4 바이트입니다.
GCC는 LP64 모델을 사용합니다. 즉, int는 32 비트이지만 long은 64 비트 모드에서 64 비트입니다.
예를 들어 MSVC는 LLP64 모델을 사용하므로 64 비트 모드에서도 int와 long이 모두 32 비트입니다.
답변
C ++ 사양 자체 (이것에 대한 이전 버전하지만 충분한)이 개방을 떠난다.
부호있는 정수 유형에는 ‘
signed char
‘, ‘short int
‘, ‘int
‘및 ‘long int
‘의 네 가지가 있습니다 . 이 목록에서 각 유형은 목록에있는 이전 유형만큼 최소한의 스토리지를 제공합니다. Plain int는 실행 환경의 아키텍처에서 제안한 자연스러운 크기를 갖습니다 *.[각주 : 즉, 헤더에 정의 된대로 INT_MIN 및 INT_MAX 범위의 값을 포함 할만큼 충분히 큽니다
<climits>
. — foonote 끝]
답변
Kevin Haines가 지적했듯이 int는 INT_MIN 및 INT_MAX에 맞아야하는 실행 환경에서 제안한 자연 크기를 갖습니다.
C89 표준 UINT_MAX
은 최소 2 ^ 16-1, USHRT_MAX
2 ^ 16-1 및 ULONG_MAX
2 ^ 32-1 이어야한다고 명시합니다 . 이는 short 및 int의 경우 최소 16, long의 경우 32의 비트 수를 만듭니다. char의 경우 최소한 8 비트 ( CHAR_BIT
)를 가져야한다고 명시합니다 . C ++는 limits.h 파일에 대한 이러한 규칙을 상속하므로 C ++에서는 해당 값에 대해 동일한 기본 요구 사항이 있습니다. 당신은 그러나해야 하지 그 INT 적어도 2 바이트임을에서 파생. 이론적으로 char, int 및 long은 모두 1 바이트 CHAR_BIT
가 될 수 있습니다. 이 경우 최소 32 비트가되어야합니다. “byte”는 항상 char 크기이므로 char가 더 크면 바이트는 8 비트가 아닙니다. 더.
답변
컴파일러에 따라 다릅니다. long은 적어도 int만큼 클 것이라고 보장되지만 더 이상 보장되지는 않습니다.
답변
대부분의 경우 바이트 수와 값 범위는 C ++가 아닌 CPU 아키텍처에 의해 결정됩니다. 그러나 C ++는 최소 요구 사항을 설정하여 litb가 제대로 설명했고 Martin York은 몇 가지 실수 만했습니다.
int와 long을 같은 의미로 사용할 수없는 이유는 항상 같은 길이가 아니기 때문입니다. C는 바이트가 8 비트이고 int가 2 바이트이며 하드웨어 명령으로 직접 처리 할 수있는 PDP-11에서 발명되었습니다. C 프로그래머는 종종 4 바이트 산술이 필요했기 때문에 long이 발명되었고 라이브러리 함수에 의해 처리되는 4 바이트였습니다. 다른 기계는 사양이 다릅니다. C 표준은 몇 가지 최소 요구 사항을 부과했습니다.