「변수」: 프로그램에서 값을 저장하기 위한 것
- 변수: 한번 값이 저장되었어도 언제든지 다시 다른 값으로 변경이 가능 한 데이터
- 상수: 값이 한번 정해지면 변경할 필요가 없는 데이터
「자료형」: 데이터의 종류
정수형 | 부동소수점형 | 문자형 |
short | float | char |
int | double | |
long | long double | |
long |
#include <stdio.h>
int main(void) {
int x;
printf("변수 x의 크기: %d\n", sizeof(x));
printf("char x의 크기: %d\n", sizeof(char));
printf("int x의 크기: %d\n", sizeof(int));
printf("short x의 크기: % d\n", sizeof(short));
printf("long의 크기: %d\n", sizeof(long));
printf("long long x의 크기: %d\n", sizeof(long long));
printf("double x의 크기: %d\n", sizeof(double));
printf("float x의 크기: %d\n", sizeof(float));
}
->
변수 x의 크기: 4
char x의 크기: 1
int x의 크기: 4
short x의 크기: 2
long의 크기: 4
long long x의 크기: 8
double x의 크기: 8
float x의 크기: 4
「정수형」
자료형 | 비트 | ||
정수형 | short | 부호 있는 정수 | 10비트 |
int | 32비트 | ||
long | |||
long | 64비트 | ||
unsinged short | 부호 없는 정수 | 16비트 | |
unsigned int | 32비트 | ||
unsigned long | |||
unsigned long long | 64비트 |
> unsigned: 음수가 아닌 값만 나타낸 다는 의미(음수를 제외해서 더 넓은 양수값 표현 가능)
> singed: 음수도 나타낸다는 의미.
- 4개의 정수형 모두 unsigned, signed를 붙일 수 있다.
「overflow」: 변수가 저장할 수 있는 범위를 넘어서는 수를 저장했을 때 발생
「상수」
> 정수 상수: 12, 100과 같이 표기하며, 기본적으로 int형으로 간주한다. int의 범위를 넘어서면 long으로 자동으로 처리한다.
접미사 | 자료형 | 예 |
u, U | unsinged int | 123u, 123U |
l, L | long | 123l, 123L |
ul, UL | unsinged long | 132ul, 123UL |
> 정수 상수는 10진법뿐만 아니라 8 진법 이나 16진법으로도 표기가 가능하다.
#include <stdio.h>
int main(void) {
int x=10;
int y = 010;
int z = 0x10;
printf("x=%d\n", x);
printf("y=%d\n", y);
printf("z=%d\n", z);
}
->
x=10
y=8
z=16
> 기호상수: 기호에 의하여 상수를 표현한 것.
다음과 같이 선언한다.
- #define EXCHANGE_RATE 1200
- const int EXCHANGE_RATE 1120;
「부동 소수점」
> 고정소수점: 32비트를 사용해서 실수를 표현한다면 16비트는 소수점 이상을, 나머지 16비트는 소수점 이하를 표현하는 방식
> 부동소수점: 같은 수의 비트를 상요해서 더 넓은 범위의 실수를 표현. 소수점의 위치를 움직임으로써 한정된 비트로 정밀도를 보다 높게 표현할 수 있다. 따라서 고정소수점 방식에 비해 아주 큰 정수와 아주 작은 소수의 표현이 가능하다.
-float, double, long double 3가지 자료형을 가진다.
- 실수를 출력하는 기본적인 지정자는 %f이다.
자료형 | 명칭 | 크기 |
float | 단일 정밀도 부동소수점 | 32비트 |
double | 두배 정밀도 부동소수점 | 64비트 |
long double |
#include <stdio.h>
int main(void) {
float x = 1.234567890123456789;
double y = 1.1234567890123456789;
printf("float의 크기=%d \n", sizeof(float));
printf("double의 크기=%d \n", sizeof(double));
printf("x=%30.25f\n", x);
printf("y=%30.25f\n", y);
}
->
float의 크기=4
double의 크기=8
x= 1.2345678806304931640625000
y= 1.1234567890123456912476740
> 부동소수점 상수
실수 | 지수표기법 | 의미 |
123.45 | 1.2345e2 | 1.23456 x 10^2 |
12345.0 | 1.2345e5 | 1.2345 x 10^5 |
0.000023 | 2.3e-5 | 2.3 x 10^-5 |
2,000,000,000 | 2.0e9 | 2.0 x 10^9 |
「오버플로우, 언더플로우」
> 오버플로우: 변수에 대입된 수가 너무 커서 변수가 저장할 수 없는 상황. float형 변수는 1 x 10^38 이상의 수를 저장하지 못한다.
> 언더플로우: 부동 소수점 수가 너무 작아서 표현하기가 힘든 상황
#include <stdio.h>
int main(void) {
float x = 1.23456e-38;
float y = 1.23456e-40;
float z = 1.23456e-46;
printf("x= %e \n", x);
printf("y= %e \n", y);
printf("z= %e \n", z);
}
->
x= 1.234560e-38
y= 1.234558e-40
z= 0.000000e+00
「제어문자」
제어문자 | 이름 |
\0 | 널문자 |
\a | 경고 |
\b | 백스페이스 |
\t | 수평탭 |
\n | 줄바꿈 |
\v | 수직탭 |
\f | 폼피드 |
\r | 캐리지 리턴 |
\" | 큰따옴표 |
\' | 작은따옴표 |
\\ | 역슬레시 |
> 정수형으로서의 char
자료형 | 설명 | 바이트수 | 범위 | ||
문자형 | 부호있음 | char | 문자 및 정수 | 1 | -128~127 |
부호없음 | unsigned char | 문자 및 부호없는 정수 | 1 | 0~255 |
「정리하면서」
> C언어에 정수 타입이 많은 이유
- 각 타입이 차지하는 메모리 공간의 크기가 다르기 때문이다. 때때로 메모리 공간이 충분하지 않은 경우도 있기 때문에 이렇다.
> 변수를 선언하지 않고 초기화한다면.
- 변수에 종류에 따라 다르지만 알 수 없는 값이 들어간다. garbage value가 들어가므로 반드시 초기화해야 한다.