1. [C 언어] 자료형의 키워드
ㅇ 기본 키워드 : char, int, float, double, void
- char : 문자 위주 이지만 숫자도 취급 가능
. (통상 1 바이트)
- int : 정수 (고정소수점 방식)
. (1 워드 단위로써 통상 4 바이트)
- float, double, long double : 실수 (부동소수점 방식)
. float (통상 4 바이트), double (통상 8 바이트), long double (통상 8~16 바이트)
- void : `자료형이 정해지지 않음` 또는 `값 없음`을 의미
ㅇ 변형 키워드 : short, long, unsigned, signed
- 부호 변형 : (signed, unsigned)
- 크기 변형 : (short, long)
* 한편, signed 는, 의미를 명확히 하기 위함
. 실제로 (양수,음수 모두 가능)이 디폴트 이나,
. 그 의미를 더욱 분명히 하기 위해 자주 사용됨
* 또한, 변형 키워드 뒤 int 은, 생략 가능
. 例) short int (또는 줄여서, short), long int (또는 줄여서, long) 등
- 결국,
. short = short int = signed short = signed short int 들은, 모두 동일 자료형 임
. long = long int = signed long = signed long int 들은, 모두 동일 자료형 임
ㅇ 例) 자료형 선언 및 초기화
- unsigned short a; (변수 a를 자료형 unsigned short 선언함)
- unsigned short a = 32799; (변수 a를 자료형 unsigned short 선언, 상수 32799 초기화)
ㅇ 한편, C 언어는, 별도로 논리값 자료형이 없음
- true,false 논리값 자료형 없이 그냥 정수값으로 표현
. 즉, 0 은 false로 판단, 0 이외는 true로 판단
- 단, C99 버전에서 비로소 _Bool 형이 추가됨
2. [C 언어] 자료형의 크기 (메모리 상의 크기)
ㅇ 이론적 자료형 최소허용 크기
- char (1 바이트) : -128 ~ +127
- short (2 바이트) : -32767 ~ +32767
. 통상, 16 비트
- int (4 바이트) : -32767 ~ +32767
. 통상, 컴퓨터 워드 구현 크기에 따라, 2,4,8 바이트 가능
- long (4 바이트) : -2147483647 ~ +2147483647
. 통상, 32 비트
- long long (8 바이트)
- float (4 바이트) : 3.4*10-38 ~ 3.4*1038
- double (8 바이트) : 1.7*10-308 ~ 1.7*10308
- long double (8,12~16 바이트) : 1.2*10-4932 ~ 1.2*104932
ㅇ 기본 자료형의 메모리 크기 확인 연산자 : sizeof
- 例) sizeof(변수명); 또는 sizeof 변수명; // 임의 변수명의 크기
- 例) sizeof(int); // 특정 자료형의 크기
- 例) sizeof(배열명)/sizeof(배열 자료형); // 배열 크기
- 例) sizeof(struct 구조체명); // 구조체 크기
ㅇ 자료형 크기 등이 정의되어 있는 헤더 파일
- limits.h : 자료형 크기 등이 기계의존적으로 정의되어 있음
- stdint.h : 데이터형 마다 그 길이를 명확하게 수치로써 정의함 (C99에서 새롭게 도입됨)
. 서로다른 기계 간에 이식성에 도움을 주기 위함
3. [C 언어] 데이터 모델
※ 컴파일러나 플랫폼에 따라, 자료형에 대한 모델이 달라짐
- (약어) S : short, I : int, L : long, LL : long long, P : 포인터
ㅇ ILP32 (int, long, pointer : 32 비트)
- x86 (32 비트) : 리눅스, 솔라리스, BSD, OS X, Windows
ㅇ LLP32 (long long, pointer : 64 비트) / IL32P64 (int,long : 32 비트, pointer : 64 비트)
- x86 (64 비트) : Windows
ㅇ LP64 (long, pointer : 64 비트) / I32LP64 (int : 32 비트, long,pointer : 64 비트)
- x86 (64 비트) : 리눅스, 솔라리스, BSD, OS X
ㅇ ...