2-1 변수와 자료형

변수(variable) : 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간


1
2
3
int x;
int y;
int sum;

cs

\

요런식으로 변수를 선언하게 되면 컴퓨터는 x, y, sum 이라는 이름의 상자(메모리) 를 할당해준다.
각각의 변수들은 모두 자신만의 이름을 가지고 있어야한다.

이러한 변수에는 다양한 유형이있다. 어떤 변수를 선언하느냐에 따라서 데이터의 종류, 할당 크기가 달라지게된다.
예를 들면 정수를 저장하는 변수, 실수또는 문자를 저장하는 변수가있다.

이러한것을 자료형(data type)이라고하며, 변수가 저장할 데이터가 정수인지 실수인지, 또다른 데이터인지를 지정하는것이다.

자료형에는

정수형
short
int  
long         
long long    

실수형
float    
double
long double

문자형
char


가 있다.



1. 정수형

가장 기본적인 데이터 타입으로 정수를 저장한다.
short, int, long, long long 4가지가 존재하며 순서대로 2, 4, 4, 8 바이트의 크기를 가진다.

각 자료형의 크기는 sizeof 연산자를 사용하여 구할수있다.
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{

 
    printf("int형의 크기 : %d\n"sizeof(int));
    return 0;
}
cs



printf 에서의 형식 지정자는 %d를 이용하며 scanf 에서의 형식 지정자도 %d 를 이용한다. 

자료형

비트(바이트) 

범위 

정수형 

short 

부호있는

정수 

16 (4)

-32768~32767 

int 

32 (8)

-2147483648~2147483647 

long 

-2147483648~2147483647  

 long long

64 (16)

-9,223,372,036,854,775,808~9,223,372,036,854,775,807 

 unsigned short

부호없는정수 

16 (4)

0~65535 

unsigned int 

32 (8)

0~4294967295 

 unsigned long

0~4294967295 

unsigned long long 

64 (16)

0~18,446,744,073,709,551,615 


각  정수형에서는 위 표와같은 범위로 사용이 가능하다.

사용자가 맞는 자료형을 골라서 쓰면된다.


앞에 unsigned가 붙는 경우는 음수의 값을 표시하지 않기때문에 0~더 높은값의 양수를 표현가능하다.


각 범위를 넘어가면 오버플로우라는 현상이 일어난다.

short형의 최대 표현 범위는 32767까지인데 short형으로 32768을 표현하면 -32768로 제일 낮은값으로 돌아간다.

unsigned를 붙이면 0으로 되돌아간다.





상수 : constant로 프로그램 실행시 한번 정해주면 수정이 불가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    double redius; //원의 반지름 변수
    double area;    //원의 면적 변수
 
    printf("원의 면적을 입력해주세요 : ");
    scanf("%lf"&redius);
 
    area = 3.141592*redius*redius; // 3.141592 부분이 상수
    printf("원의 면적 : %f \n", area);
 
    return 0;
}
cs

위 소스코드처럼 변수에는 이름이 붙지만 3.141592 부분에는 이름이 붙지 않는다. 이러한 상수를 리터럴 상수(Literal constant)라고한다.

하지만 상수에도 이름을 넣을수 있는 방법이있다. 상수에 이름을 넣는것을 기호 상수(symbolic constant)라고한다.

리터럴 상수와 기호상수의 차이를 간단하게 보자면,
1
2
won = 1120 * dollar;
won =EXCHANGE_RATE *dollar;

cs 


이런 차이이다. 환율은 매일 바뀌기 때문에 기호 상수를 사용하지않으면 일일이 바꿔줘야하지만 기호상수를 사용하면 밑에 설명하겠지만 한부분만 바꿔주면 되는 엄청난 편리함을 지녔다.


이러한 기호 상수를 선언하는 방법은 크게 2가지가 있다.


1. #define 문장 사용
1
#define EXCHANGE_RATE 1120
cs
앞에 #이 붙은것을 보면 눈치챘겠지만 전처리기에서 처리를 하기때문에 첫부분에서 선언을 해줘야한다.

2.const 키워드 사용

1
const int EXCHANGE_RATE = 1120;
cs
변수 앞에 const를 붙이면 상수가 된다. 선언시에 const가 붙여진 변수는 초기화된 후에 그 값이 변경될 수 없다.



예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#define TAX_RATE 0.2 //#define 을 이용한 기호상수 정의
 
int main()
{
    const int MONTHS = 12// const를 이용한 기호상수 정의
    int m_salary, y_salary; // 변수 선언
 
    printf("월급을 입력해주세요"); //입력 안내1
    scanf("%d"&m_salary); // 스캔
 
    y_salary = MONTHS * m_salary; //계산
    printf("연봉은 %d 입니다.\n", y_salary); //출력
    printf("세금은 %f 입니다.\n", y_salary*TAX_RATE);
 
    return 0;
}
cs