C언어에서 보장하는 int 데이터형의 크기가 시스템의 워드 크기에 못미칠때에...
글쓴이: gurumong / 작성시간: 화, 2006/04/18 - 6:09오후
C언어에서 int 와 short의 크기를 최소한 -32767~32767(16비트)를 표준이(C99) 보장한다고 알고있습니다
그리고 int(16비트)는 대부분의 시스템에서 워드 크기이기 때문에 가장 효율적이라고도 알고있구요
만약 어떤 시스템의 워드 크기가 16비트 보다 작다고 한다면(예를 들면 8비트와 같이)
그러한 시스템에서의 임플리멘테이션이 C언어의 표준을 따르려면
무조건적으로 int가 -32767~32767(16비트) 크기보다 크도록 구현해야합니까?
혹시 표준에 이러한 시스템에 대한 표준을 따로 가지고 있지 않습니까?
Forums:
.
int형의 최소 크기는 말씀하신 대로 -32767~32767이 맞습니다. 8비트 시스템이라 해도 int형은 그것과 동일하거나 그 이상의 표현 범위를 가져야 합니다.
실제 사례를 하나 소개하자면, avr gcc를 들 수 있습니다. 8비트 마이크로컨트롤러인 atmel사의 AVR 씨리즈를 위한 C 컴파일러죠.
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html
typedef signed int int16_t
16-bit signed type.
typedef signed long int int32_t
32-bit signed type.
typedef signed long long int int64_t
64-bit signed type.
typedef signed char int8_t
8-bit signed type.
참고로, AVR과 같은
참고로, AVR과 같은 환경에서는 그냥 char 또는 int보다는, stdint.h에 정의된 int8_t나 uint16_t 와 같이 크기가 명시된 타입을 쓰는 것이 더 권장되는 듯 합니다.
C99 의6.2.5 Types 의
C99 의
6.2.5 Types 의 5번째 문단에서는
와 같이 기술하고 있습니다.
말씀하신 16 bit 이상의 값을 가진다는 내용은 안 보입니다.
Java의 경우는 각 타입이 가지는 정확한 값의 range가 정해지지만
C에서는 그런값이 정해지지 않는 것으로 알고 있습니다.
다만 6.3.1.1 절은
처럼 각 integer type이 표현할 수 있는 값의 범위의 순위를 두고 있습니다.
느슨하게 해석하자면
와 같은 관계에 있다는 것이 되겠죠.
헛.. 정말 그렇네요..
미확인님의 글을 보고 찾아봤더니만,
와 같은 내용이 있네요.
댓글 달기