특히 자료형에 대한 게 많이 헷갈리는 경우가 존재합니다.
어쩔때는 이러한 long long 을 scanf 나 printf 로 출력해야 할 때도 있겠죠
(저 같은 경우에는 int 나 float 같은 것 만 대충 알고 있었습니다).
이런 경우가 너무 많고 헷갈려서 여러 곳에서 정보를 모아서 정리를 해 보았습니다.
이상하게 모든 변수에 대해서 모아놓은 포스팅을 찾기가 매우 어렵더라구요.
자료형 | 크기 | 범위 | 비고 |
---|---|---|---|
char signed char | 1바이트, 8비트 | -128~127 | |
unsigned char | 1바이트, 8비트 | 0~255 | |
short short int | 2바이트, 16비트 | -32,768~32,767 | int 생략 가능 |
unsigned short unsigned short int | 2바이트, 16비트 | 0~65,535 | int 생략 가능 |
int signed int | 4바이트, 32비트 | -2,147,483,648~ 2,147,483,647 | |
unsigned unsigned int | 4바이트, 32비트 | 0~4,294,967,295 | int 생략 가능 |
long long int signed long signed long int | 4바이트, 32비트 | -2,147,483,648~ 2,147,483,647 | int 생략 가능 |
unsigned long unsigned long int | 4바이트, 32비트 | 0~4,294,967,295 | int 생략 가능 |
long long long long int signed long long signed long long int | 8바이트, 64비트 | -9,223,372,036,854,775,808~ 9,223,372,036,854,775,807 | int 생략 가능 |
unsigned long long unsigned long long int | 8바이트, 64비트 | 0~18,446,744,073,709,551,615 | int 생략 가능 |
Type Name | Bytes | Other Names | Range of Values |
---|---|---|---|
int | * | signed, signed int | System dependent |
unsigned int | * | unsigned | System dependent |
__int8 | 1 | char, signed char | –128 to 127 |
__int16 | 2 | short, short int, signed short int | –32,768 to 32,767 |
__int32 | 4 | signed, signed int | –2,147,483,648 to 2,147,483,647 |
__int64 | 8 | none | –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
bool | 1 | none | false or true |
char | 1 | signed char | –128 to 127 |
unsigned char | 1 | none | 0 to 255 |
short | 2 | short int, signed short int | –32,768 to 32,767 |
unsigned short | 2 | unsigned short int | 0 to 65,535 |
long | 4 | long int, signed long int | –2,147,483,648 to 2,147,483,647 |
long long | 8 | none (but equivalent to __int64) | –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
unsigned long | 4 | unsigned long int | 0 to 4,294,967,295 |
enum | * | none | Same as int |
float | 4 | none | 3.4E +/- 38 (7 digits) |
double | 8 | none | 1.7E +/- 308 (15 digits) |
long double | same as double | none | same as double |
wchar_t | 2 | __wchar_t | 0 to 65,535 |
By default wchar_t is a typedef for unsigned short.
▼ printf 이용 시에 사용해야 하는 서식 문자
서식문자 | 출력 대상(자료형) | 출력 형태 |
%d | int | 부호 있는 10진수 정수 |
%u | unsigned int | 부호 없는 10진수 정수 |
%o | unsigned int | 부호 없는 8진수 정수 |
%x, %X | unsigned int | 부호 없는 16진수 정수 |
%f | float, double | 10진수 방식의 부동소수점 실수 |
%e, %E | float, double | e 또는 E 방식의 부동소수점 실수 |
%g, %G | float, double | 값에 따라 %f와 %e 사이에서 선택 |
%c | char | 값에 대응하는 문자 |
%s | char * | 문자열 |
%p | void * | 포인터의 주소 값 |
%n | int * | 포인터의 주소 값 |
%lu | unsigned long | 부호없는 long |
%llu | unsigned | 부호없는 long long |
서식 | 의미 | 출력 타입 | 설명 |
%hd | short integer | unsigned short | 부호없는 10진 정수 출력 |
%d 또는 %i | Decimal, Integer | int | 10진 정수 출력 |
%ld | long | 10진 정수 출력 | |
%lld | long long | 10진 정수 출력 | |
%lu | unsigned long | 부호없는 10진 정수 출력 | |
%I64d | __int64 | 10진 정수 출력 | |
%I64u | unsigned __int64 | 부호없는 10진 정수 출력 | |
%o | Octal | unsigned int | 8진 정수 출력 |
%x 또는 %X | heXadecimal | unsigned int | 16진 정수로 출력. 대문자 X 쓰면 A~F도 대문자 출력 |
%u | Unsigned | unsigned int | 부호없는 10진 정수 출력 |
%c | Character | char, unsigned char | 1개의 문자 출력 |
%s | String | char*, string, CString | 문자열 출력 |
%f | Float | float | 고정 소수점 형식의 실수 출력 |
%lf | double | 고정 소수점 형식의 실수 출력 | |
%e 또는 %E | float, double | 부동 소수점 형식의 실수 출력 | |
%g 또는 %G | float, double | %e, %f 중 더 짧은 형식으로 출력 | |
%p | Pointer | void * | 포인터의 번지값 출력 |
%n | 출력된 문자 개수를 포인터에 대입 | ||
%% | %문자 자체를 출력 |
▼ printf 규칙
printf(“%#7.5hd”);
printf(“% ”);
A B C D
A : 출력의 형태에 조절을 가하기 위한 특별한 표시문자(#)
−: 좌측 정렬
0 : 빈 공간을 0으로 채우기
+ : 출력 할 수의 크기가 0보다 클 때, + 기호 붙여주기
공백: 출력 할 수의 크기가 0보다 클 때 수의 앞에 빈칸 하나 출력
# : 8진수, 16진수 출력 시 각각 0과 0x를, 실수의 경우 소수점 이하 0 출력
B : 출력에 사용되는 최소한의 폭(7)
C : 정밀도(5)
D : 출력데이터의크기정보변경(h)
▼ scanf 이용 시에 사용해야 하는 서식 문자
서식문자 | 입력대상(자료형) | 입력 형태 |
%d | int | 부호 있는 10진수 정수 |
%i | int | 부호 있는 10진수 정수 |
%u | unsigned int | 부호 없는 10진수 정수 |
%o | unsigned int | 부호 없는 8진수 정수 |
%x | unsigned int | 부호 없는 16진수 정수 |
%c | char | 문자 |
%s | char * | 문자열 |
%p | void * | 주소 값 |
%f %e %g | float | 부호 있는 실수 |
%d %hd %hhd | int short char | %d %ld %lld | int long long long | %f %lf %Lf | float double long double |
▼ 상수에 사용되는 접미사 정리
일단 상수는 변경이 가능한 변수와 달리 변경이 불가능한 수입니다.
상수에는 두 가지 종류가 있는데 바로 정수형 상수와 실수형 상수 입니다.
정수형,실수형 상수는 다음과 같습니다.
- - 정수형 상수는 int 형으로 표현합니다.
- 실수형 상수는 double 형으로 표현합니다.
즉, 숫자를 변수에 직접 대입할 때, 알아야 할 것이라고 생각하면 됩니다.
1234 같은 것이 정수형 상수 int 이며 (int val = 1234;) 3.14 같은것이 실수형 상수입니다.
실수형으로 선언시 double 형으로 표현됩니다.
여기서 float 형을 쓰게 된다면 (float val2 = 3.14;) 라고 쓰면 3.14는 double 형이 됩니다.
이렇게 쓰면 데이터가 잘려나갈 수 있습니다. (기본형 double 의 범위와 float 범위가 다르다)
이것을 방지하기 위해 상수 뒤에 접미사를 붙혀서 해결할 수 있습니다.
float val2 = 3.14f 위와 같이하면 3.14는 float 형이됩니다.
이처럼 정수형 상수에는 접미사를 붙힐 수 있습니다.
접미사의 종류는 다음과 같습니다.
접미사 | 자료형 |
U | unsigned int |
L | long |
UL | unsigned long |
LL | long long |
ULL | unsigned long long |
출처 : https://dojang.io/mod/page/view.php?id=30
http://stih.tistory.com/45
http://blog.daum.net/xdr_/54
http://jyhpan.tistory.com/109
http://shaeod.tistory.com/283
http://mwultong.blogspot.com/2007/08/c-unsigned-long-printf.html