반응형

자료형

 

각 자료형은 최소 크기만 지정되어 있을 뿐 딱 고정적인 값은 아니다.

 

int 형

예시로 현재는 32bit 환경의 컴퓨터가 나온 후 오랫동안 사용되어 왔기 때문에 int는 4byte라고 알고 있지만, 사실 int는 그저 정수라는 의미일 뿐 4byte로 고정되어 있는 것은 아니므로 같은 int 형이지만 16bit 환경에서는 2byte, 32bit 환경에서는 4byte로 동작한다.

 

그렇기 때문에 C 표준에서의 int 자료형의 정의는 "최소 16bit이고, short 크기 이상인 정수형" 이다.

 

 

long 형

또 다른 예시로는 long 형 자료형이 있는데 long 형 자료형은 32bit 환경에서는 4byte이고, 64bit 환경에서는 8byte 이다.

 

이렇게 환경에 따라 크기가 변하는 이유는 long 형의 크기가 딱 고정적으로 지정되어 있는 게 아니라 "최소 32bit 이상이고, int 크기 이상의 크기" 라고 되어 있기 때문이다.

 

 

size_t와 ssize_t 형

https://sean.tistory.com/63

size_t와 ssize_t 자료형은 이름에서도 알 수 있듯이 각각 unsigned와 signed이고, 뒤에 붙은 "_t"는 typedef를 했다는 의미이다.

 

size_t 자료형은 32bit 환경에서는 unsigned 32bit 정수이고, 64bit 환경에서는 unsigned 64bit 정수이며, Windows에서는 unsigned int 형, Linux에서는 unsigned long 형으로 정의되어 있지만, 다른 자료형들처럼 최소값만 정해져 있기 때문에 크기는 운영 체제와 컴파일러 환경에 따라 달라질 수 있다.

 

ssize_t 자료형은 Windows에서는 int 형, Linux에서는 long 형으로 정의되어 있지만, 역시 다른 자료형들과 같이 최소값만 정해져 있다.

(심지어 이 자료형의 경우 Windows에서는 컴파일러나 환경에 따라 없을 수도 있다.)

 

 

추가로 1byte는 8bit라고 알고 있지만, 이는 보장되지 못한다.

즉, 1byte != 8bit 일 수 있다는 것이다.

 

자료형의 크기는 limit.h 헤더파일에 선언되어 있다.

 

정수형

자료형 크기 범위
char
signed char
1byte, 8bit -128 ~ 127
unsigned char 1byte, 8bit 0 ~ 255
short
short int
2byte, 16bit -32,768 ~ 32,767
unsigned short
unsigned short int
2byte, 16bit 0 ~ 65,535
int
signed int
4byte, 32bit 2,147,483,648 ~ 2,147,483,647
unsigned
unsigned int
4byte, 32bit 0 ~ 4,294,967,295
long
long int
signed long
signed long int
32bit 환경 - 4byte, 32bit / 64bit 환경 - 8byte, 64bit

Windows : 32bit 환경, 64bit 환경 - 4byte
Linux : 32bit 환경 - 4byte / 64bit 환경 - 8byte
32bit 환경
-2,147,483,648~ 2,147,483,647

64bit 환경
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long
unsigned long int
32bit 환경 - 4byte, 32bit / 64bit 환경 - 8byte, 64bit

Windows : 32bit 환경, 64bit 환경 - 4byte
Linux : 32bit 환경 - 4byte / 64bit 환경 - 8byte
32bit 환경
0 ~ 4,294,967,295

64bit 환경
0 ~18,446,744,073,709,551,615
long long
long long int
signed long long
signed long long int
8byte, 64bit -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long
unsigned long long int
8byte, 64bit 0 ~ 18,446,744,073,709,551,615
size_t, ssize_t 32bit 환경 - 4byte, 32bit / 64bit 환경 - 8byte, 64bit  

 

실수형

long double 자료형의 경우 OS 환경에 따라 다르다.

Windows : 32bit 환경, 64bit 환경 - 8byte

Linux : 32bit 환경 - 12byte, 64bit 환경 - 16byte

OS X : 32bit 환경, 64bit 환경 - 16byte

자료형 크기 범위 비고
float 4byte, 32bit 1.175494e-38 ~ 3.402823e+38 유효 자릿수 - 7자리
double 8byte, 64bit 2.225074e-308~1.797693e+308 유효 자릿수 - 16자리
long double 8byte, 64bit 2.225074e-308~1.797693e+308  

 

포인터형

32bit 환경 모두 4byte
64bit 환경 모두 8byte

 


형식(서식) 지정자

 

Usage : %[플래그][폭][.정밀도][길이]서식지정자

플래그 : 남은 공간을 어떤 숫자로 채울지를 지정

  • (공백으로 할 시 양수일 때는 부호를 출력하지 않고 공백으로 표시, 음수일 때는 - 부호를 출력하는데 양수일 때 공백 대신 + 기호를 출력하고 싶다면 공백 대신 + 기호를 써준다.)
  • (8진수와 16진수 표기 시 플래그 자리에 #을 사용하면 8진수를 의미하는 0과 16진수를 의미하는 0x가 붙어 출력된다.)
  • (플래그 자리에 0을 입력하면 출력하는 폭의 남은 공간을 전부 0으로 채워 출력한다.)
  • (플래그 자리에 -을 입력하면 왼쪽 정렬 기능이다.)

: 출력할 값을 포함하여 몇 칸으로 할 지 숫자를 기재한다.

.정밀도 : 소수점 자리 몇 번째 자리까지 출력할지 숫자를 기재한다.

길이 : 몇 바이트만큼 출력할 것인지(접두사)

  • hh, h, l, ll, j, z, t, L
hh
%hhd, %hhi : signed char형 크기
%hho, %hhu, %hhx, %hhX : unsigned char형 크기
%hhn : signed char *형 크기

h
%hd, %hi : short int형 크기
%ho, %hu, %hx, %hX : unsigned short int형 크기
%hn : short int *형 크기

l
%ld, %li : long int형 크기
%lo, %lu, %lx, %lX : unsigned long int형 크기
%lf, %lF, %le, %lg, %lG, %la, %lA : double형 크기
%lc : wint_t형 크기
%ls :wchar_t *형 크기
%ln : long int *형 크기

ll
%lld, %lli : long long int형 크기
%llo, %llu, %llx, %llX : unsigned long long int형 크기
%lln : long long int *형 크기

j
%jd, %ji : intmax_t형 크기
%jo, %ju, %jx, %jX : uintmax_t형 크기
%jn : intmax_t *형 크기

z
%zd, %zi : size_t형 크기
%zo, %zu, %zx, %zX : size_t형 크기
%zn : size_t *형 크기

t
%td, %ti : ptrdiff_t형 크기
%to, %tu, %tx, %tX : ptrdiff_t형 크기
%tn : ptrdiff_t *형 크기

L
%Lf, %LF, %Le, %Lg, %LG, %La, %LA : long double형 크기

 

정수형

형식 지정자 의미
%u 부호 없는 10진 정수
%d, %i 부호 있는 10진 정수
%o 부호 없는 8진 정수
%x, %X 부호 없는 16진 정수

 

long, long long 형 정수형

형식 지정자 의미
%lu 부호 없는 long(4byte)
%ld 부호 있는 long(4byte)
%llu 부호 없는 longlong(8byte)
%lld 부호 있는 long lont(8byte)

 

실수형

형식 지정자 의미
%f, %F 실수를 소수점으로 표기(소문자, 대문자)
%e, %E 실수 지수 표기법 사용(소문자, 대문자)
%g, %G %f와 %e 중에서 짧은 것을 사용(소문자), %F와 %E 중에서 짧은 것을 사용(대문자)
%a, %A 실수를 16진법으로 표기(소문자, 대문자)
%Lf long double
%Le long double

 

문자열

형식 지정자 의미
%c 단일 문자
%s 문자열
%n %n의 포맷 값에 int 포인터를 넣으면 지금까지 출력한 문자 개수를 변수에 넣어준다.

 

포인터

형식 지정자 의미
%p 포인터의 메모리 주소

 


리터널 접미사

 

정수 리터널 접미사(8진수 16진수에도 사용 가능)

접미사 자료형
생략 시 int
l, L long
u, U unsigned int
ul, UL unsigned long
ll, LL long long
ull, ULL unsigned lon long

 

실수 리터널 접미사

접미사 자료형
생략 시  double
f, F float
l, L long double

 


 

 

%su : 유니코드 문자열

 

%s8 : UTF-8 문자열

 

%ma : ascii 문자 64개

 


 

https://kirkim.github.io/c/2021/02/05/size_t_ssize_t.html

 

1byte가 8bit인 이유 : https://zepeh.tistory.com/313

 

반응형

+ Recent posts