04-4.1(변수와 상수)~4.5(문자형)
4.1 변수와 상수
변수
프로그램에서 일시적으로 데이터를 저장하는 공간
변수의 필요성
입력된 데이터를 저장
유연한 프로그램 작성
변수와 상수
변수 | 상수 |
저장된 값의 변경이 가능한 공간 | 저장된 값의 변경이 불가능한 공간 |
리터럴 상수
3.141592와 같은 상수에는 이름이 안 붙음
4.2 자료형
자료형
데이터의 종류
자료형 | ||
정수형 | 부동 소수점형 | 문자형 |
short int long longlong |
float double long double |
char |
자료형의 크기
sizeof() - 변수나 자료형의 크기를 바이트로 변환하는 연산자
4.3 정수형
short | int | long | long long |
16비트(2바이트) | 32비트(4바이트) | 32비트(4바이트) | 64비트(8바이트) |
정수형 범위
자료형 | 바이트 | 범위 | ||
정수형 | 부호 O | short | 2 | -32,768~32,767 |
int | 4 | -2,147,483,648~2,147,483,647 | ||
long | 4 | -2,147,483,648~2,147,483,647 | ||
long long | 8 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 | ||
부호 X | unsigned short | 3 | 0~65,535 | |
unsigned int | 4 | 0~4,294,967,295 | ||
unsigned long | 4 | 0~4,294,967,295 | ||
unsigned long long | 8 | 0~18,446,744,073,709,551,615 |
오버플로우(overflow)
변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생
한계를 벗어나면 다시 처음으로 돌아가서 시작
정수 상수
정수 상수의 자료형은 기본적으로 int 형
정수 상수의 자료형을 명시하려면 접미사 사용
접미사 | 자료형 | 예 |
u 또는 U | unsigned int | 123u 또는 123U |
l 또는 L | long | 123l 또는 123L |
ul 또는 UL | unsigned long | 123ul 또는 123UL |
기호 상수
이름이 붙은 상수
기호 상수 장점
높은 프로그램 가독성
용이한 상수값의 변경
기호 상수 선언 방법
#define 문장 사용: #define EXCHANGE_RATE 1120
const 키워드 사용: const int EXCHANGE_RATE = 1120;
평당 단위를 제곱미터 단위로 출력하는 프로그램
#include <stdio.h>
int main(void)
{
const double SQM_PER_PYEONG = 3.305785;
int pyeong;
printf("평수를 입력하세요: ");
scanf_s("%d", &pyeong);
printf("%d(평)은 %f(제곱미터)입니다.\n", pyeong, pyeong * SQM_PER_PYEONG);
return 0;
}
정수 표현 방식 (부호와 절대치)
양수: 십진수를 이진수로 변환하여 저장
음수: 첫 번째 비트를 부호 비트로 사용
정수 표현 방식 (2의 보수)
모든 비트 반전 → 1을 더한다
tip) 끝의 비트에서부터 가장 가까운 1을 찾고 그 앞의 비트는 변환
ex) 0001100
→ 1110100
4.4 부동 소수점형
고정 소수점 방식
정수 부분과 소수 부분에 일정 비트 할당
과학과 공학에서 필요한 큰 수 표현 불가
부동 소수점 방식
소수점의 위치를 이동하여 실수 표현
높은 정밀도와 넓은 범위의 실수 표현
부동 소수점 자료형
float | double | long double |
32비트 | 64비트 | 64비트 |
부동 소수점 범위
자료형 | 바이트 | 범위 | |
실수형 | float | 4 | ±1.17549×10-38 ~ ±3.40282×10+38 |
double | 8 | ±2.22507×10-308 ~ ±1.79769×10+308 | |
long double | 16 | ±3.3621×10-4932 ~ ±1.18973×10+4932 |
형식 지정자
%f - 기본적으로 소수점 6자리까지만 출력, 6자리를 넘으면 반올림.
부동 소수점 상수
부동 소수점 상수의 자료형은 기본적으로 double 형
float 형의 부동 소수점 상수는 f 혹은 F 접미사 사용
지수 표기법
%e, %E
태양에서 지구까지 빛의 도달 시간을 계산하여분과 초로 출력하는 프로그램
#include <stdio.h>
int main(void)
{
double c, au;
c = 3.000000e+05;
au = 1.500000e+08;
printf("빛의 속도: %ekm/s\n", c);
printf("태양 거리: %ekm\n", au);
int int_c = c;
int int_au = au;
int t_m, t_s;
t_m = (int_au / int_c) / 60;
t_s = (int_au / int_c) % 60;
printf("도달 시간: %dm %ds\n", t_m, t_s);
return 0;
}
오버플로우(overflow)
변수에 대입된 수가 너무 커서 변수가 저장할 수 없는 상황
언더플로우(underflow)
부동 소수점 수가 너무 작아서 표현하기 힘든 상황
부동 소수점 사용 시 주의할 점
적은 수의 비트로 넓은 범위의 실수를 표현하는 방법이므로 오차가 존재
실수의 값을 정확하게 표현하지 못하고 문제가 없을 만큼 근사하여 표현
4.5 문자형
문자
하나의 글자, 숫자, 기호
컴퓨터보다 사람에게 중요
문자도 숫자를 이용하여 표현
아스키 코드
ASCII: American Standard Code for Information Interchange
7비트로 128개의 문자 표현
제어문자(33개) + 인쇄문자(95개)
문자 변수
문자 저장을 위한 char형 변수
char code;
문자 상수
작은 따옴표로 문자 하나를 표현
code = 'A';
char 형
자료형 | 바이트 | 범위 | ||
문자형 | 부호 O | char | 1 | -128 ~ 127 |
부호 X | unsigned char | 1 | 0 ~ 255 |
제어 문자
\0, \a, \b, \t, \n 등