http://gracefulprograming.tistory.com/39
앞서 강좌에서 배웠던 변수를 C언어 프로그래밍에서 다루려면 우선 C언어에서 제공되는 자료형을 알아야 합니다.
오늘은 C언어의 자료형(DataType)에 대해 알아보겠습니다.
C언어의 자료형은 아래와 같이 분류할 수 있습니다.
상수 | 의미 | 값 |
---|---|---|
CHAR_BIT | 비트 필드가 없는 가장 작은 변수의 비트 수입니다. | 8 |
SCHAR_MIN | signed char 형식 변수의 최소값입니다. | –128 |
SCHAR_MAX | signed char 형식 변수의 최대 값입니다. | 127 |
UCHAR_MAX | unsigned char 형식 변수의 최대값입니다. | 255(0Xff) |
CHAR_MIN | char 형식 변수의 최소값입니다. | /J 옵션이 사용된 경우, –128; 0 |
CHAR_MAX | char 형식 변수의 최대값입니다. | /J 옵션이 사용된 경우, –127; 255 |
MB_LEN_MAX | 여러 문자 상수에서의 최대 바이트 수입니다. | 5 |
SHRT_MIN | short 형식 변수의 최소값입니다. | –32768 |
SHRT_MAX | short 형식 변수의 최대 값입니다. | 32767 |
USHRT_MAX | unsigned short 형식 변수의 최대 값입니다. | 65535(0xffff) |
INT_MIN | int 형식 변수의 최소값입니다. | –2147483648 |
INT_MAX | int 형식 변수의 최대값입니다. | 2147483647 |
UINT_MAX | unsigned int 형식 변수의 최대값입니다. | 4294967295(0xffffffff) |
LONG_MIN | long 형식 변수의 최소값입니다. | –2147483648 |
LONG_MAX | long 형식 변수의 최대값입니다. | 2147483647 |
ULONG_MAX | unsigned long 형식 변수의 최대값입니다. | 4294967295(0xffffffff) |
_I64_MIN | __int64 형식의 변수에 대한 최소값입니다. | -9223372036854775808 |
_I64_MAX | __int64 형식의 변수에 대한 최대값입니다. | 9223372036854775807 |
_UI64_MAX | unsigned __int64 형식의 변수에 대한 최대값입니다. | 18446744073709551615(0xffffffffffffffff) |
상수 | 의미 | 값 |
---|---|---|
FLT_DIG DBL_DIG LDBL_DIG | 소수 자릿수가 q인 부동 소수점 수가 부동 소수점 표현으로 반올림되고 정밀도의 손실 없이 다시 복원될 수 있는 자릿수 q입니다. | 6 15 15 |
FLT_EPSILON DBL_EPSILON LDBL_EPSILON | x + 1.0이 1.0과 같지 않은 가장 작은 양수 x입니다. | 1.192092896e–07F 2.2204460492503131e–016 2.2204460492503131e–016 |
FLT_GUARD | 0 | |
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG | 부동 소수점 유효 숫자에서 FLT_RADIX로 지정된 기수의 자릿수입니다. 기수는 2입니다. 따라서 이러한 값이 비트를 지정합니다. | 24 53 53 |
FLT_MAX DBL_MAX LDBL_MAX | 표현 가능한 최대 부동 소수점 수입니다. | 3.402823466e+38F 1.7976931348623158e+308 1.7976931348623158e+308 |
FLT_MAX_10_EXP DBL_MAX_10_EXP LDBL_MAX_10_EXP | 10을 해당 수만큼 거듭제곱한 값이 표현 가능한 부동 소수점 수인 최대 정수입니다. | 38 308 308 |
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP | FLT_RADIX를 해당 수만큼 거듭제곱한 값이 표현 가능한 부동 소수점 수인 최대 정수입니다. | 128 1024 1024 |
FLT_MIN DBL_MIN LDBL_MIN | 최소 양수 값입니다. | 1.175494351e–38F 2.2250738585072014e–308 2.2250738585072014e–308 |
FLT_MIN_10_EXP DBL_MIN_10_EXP LDBL_MIN_10_EXP | 10을 해당 수만큼 거듭제곱한 값이 표현 가능한 부동 소수점 수인 최소 음의 정수입니다. | –37 –307 –307 |
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP | FLT_RADIX를 해당 수만큼 거듭제곱한 값이 표현 가능한 부동 소수점 수인 최소 음의 정수입니다. | –125 –1021 –1021 |
FLT_NORMALIZE | 0 | |
FLT_RADIX _DBL_RADIX _LDBL_RADIX | 지수를 표현하는 기수입니다. | 2 2 2 |
FLT_ROUNDS _DBL_ROUNDS _LDBL_ROUNDS | 부동 소수점 더하기의 반올림 모드입니다. | 1 (near) 1 (near) 1 (near) |
이전 강좌에서 변수의 자료형(DataType)은 메모리에 할당할 변수의 크기를 결정한다고 말씀드렸습니다.
표준 라이브러리에는 각 자료형 별로 기본적으로 메모리 크기가 정의되어 있습니다.
일부 자료형의 크기는 OS의 메모리 주소 체계(32bit/64bit)에 따라 달라집니다.
이러한 차이는 로컬 환경에서 구동되는 프로그램인 경우 크게 문제될 부분은 없지만 네트워크를 통해 다른 프로그램과 통신을 하는 경우에는 문제가 생길 수 있으니 주의해야 합니다.
OS | 32bit | 64bit(windows) | 64bit(linux) | |
데이터 표현 모델 | ILP32 | LLP64 | LP64 | |
분류 | 변수 타입 | size(byte) | size(byte) | size(byte) |
정수형 | char | 1 | 1 | 1 |
short int | 2 | 2 | 2 | |
int | 4 | 4 | 4 | |
long int | 4 | 4 | 8 | |
long long | 8 | 8 | 8 | |
pointer | 4 | 8 | 8 | |
size_t | 4 | 8 | 8 | |
실수형 | float | 4 | 4 | 4 |
double | 8 | 8 | 8 |
이 부분을 꼭 기억해주세요.
64bit OS에서는 메모리 주소를 64bit로 표현하기 때문에 주소값을 갖는 포인터(Pointer)도 8byte로 확장이 됩니다.
64bit 환경에서 구동되는 프로그램을 개발할 때 주의해야 할 부분에 대해서는 나중에 자세히 다루도록 하고 본 강좌에서는 ILP32 모델 기준으로 설명드리겠습니다.
참고사항
여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.
-Peter의 우아한 프로그래밍