본문 바로가기
Programming/C

C언어 5. 자료형 & 서식지정자

by Rayched 2022. 8. 12.

0. 자료형 개요

https://rclogstorage.tistory.com/m/6

 

C언어 2. 변수

수학에서 변수란 "값이 정해지지 않고 임의의 값을 가질 수 있는 문자"를 의미한다. 프로그래밍에서도 이와 마찬가지로 변수는 특정한 값이 정해지지 않고, 대입을 통해서 값을 언제든지 바꿀

rclogstorage.tistory.com

예전에 설명했던 변수 게시글에서 '변수 생성 방법 요약' 부분을 한번 살펴보자.

처음에 변수를 생성할 때, 가장 먼저 변수의 자료형을 정해줘야 한다고 설명했었다.

이번에 정리할 것은 '자료형'에 대한 이야기이다.

예전에 작성했던 변수 예시 문제, 참고용으로 가져왔다.

위의 코드에서 'int a;', 'int b = 40;' 부분을 한번 살펴보자.

a와 b는 변수의 이름이다. 변수의 이름 앞에 붙는 것이 자료형으로

해당 변수 두 개는 정수형 변수이다. 여기서 'int'는 integer의 약어로 정수라는 뜻을 가지고 있다.

 

1. 자료형 Data Type

  • 변수의 종류
  • 변수에 특정한 값을 담기 전에 정수, 실수, 문자, 문자열 등 어떤 값을 해당 변수에 담을 수 있는지 미리 정해줘야 한다.

자료형의 사전적인 의미는 확인했으니, 이제 자료형이 어떤 것들이 있는지 알아볼 필요가 있다.

아래의 표는 자료형의 종류에 대해 정리해놓은 것이다. 해당 표를 보면서 같이 설명할 것이다.

자료형 / 명칭 크기 값의 표현범위
정수형 char 1 byte -128 ~ +127
short 2 byte -32,768 ~ +32,767
int 4 byte -2,147,483,648 ~ +2,147,483,647
long 4 byte -2,147,483,648 ~ +2,147,483,647
long long 8 byte -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807
실수형 float 4 byte ±3.4 * 10^(-37) ~ ±3.4 *  10^(38)
double 8 byte ±1.7 * 10^(-307) ~ ±3.4 * 10^(308)
long double 8 byte 이상 double 이상의 표현 범위

① 정수형

정수형에서 'char'는 정수와 문자를 표시할 때 사용한다. 그리고 나머지 'short', 'int', 'long', 'long long'은 정수를 나타낼 때 사용한다.

이들의 차이점은 값이 좀 더 크거나 작은 범위의 숫자까지 표시할 수 있다는 것 정도이다.

정수형은 부호의 유무에 따라 signed와 unsigned로 나뉜다.

  • signed는 부호가 존재하기 때문에 음수와 양수 둘 다 표현하는 것이 가능함.
  • unsigned는 부호가 존재하지 않기 때문에 양수만 표현할 수 있지만, 대신 범위가 약 2배 정도로 늘어난다.

정수형인 'short'로 예시를 들어보자.

부호가 존재하는 'short(signed short)'의 경우, 값의 표현 범위는 -32,768 이상 / +32,767 이하이다.

반대로 부호가 없는 'unsigned short'는 양수만 표현하지만, 값의 표현 범위는 0 ~ 65,535로

표현 범위가 약 두배 정도 늘어난 것을 알 수 있다.

 

② 실수형 

실수형에서는 'float' - 'double' - 'long double' 순으로 좀 더 큰 숫자와 더 많은 소수점을 표현하는 것이 가능하다.

실수형은 정수형과 달리 부호가 존재하지 않는 unsigned가 따로 존재하지 않는다.

//예시 문제 정수, 실수 출력하기

#include <stdio.h>

int main (void) {
  int a; //정수형 변수 a 선언
  a = 100; //변수 a에 정수 100을 담음 

  float b = 15.5f; //실수형 변수 b 선언, 값을 실수 15.5를 담음

  printf("정수형 변수 a의 값은 %d 입니다.\n", a);
  printf("실수형 변수 b의 값은 %f 입니다.", b);
 
  return 0;
}

해당 코드는 각각 정수와 실수를 출력하는 코드이다. 프로그램을 실행하면 아래와 같은 결과가 나온다.

프로그램 실행 결과

출력이 정상적으로 나온 것을 확인했으면, 다시 코드를 확인해보자.

해당 코드에서 사용된 '%d'와 '%f'를 서식 지정자라고 한다.


2. 서식지정자 개요

printf("안녕");

해당 코드를 실행하면, 출력은 '안녕' 그대로 나온다.

여기서 " "는 문장을 출력하겠다는 의미이다. 내가 컴퓨터한테 " "안의 문장을 출력하라고 명령하는 것이다.

그렇다면 내가 숫자를 출력하고 싶어서 아래와 같이 코드를 쓰고, 프로그램을 실행하면 어떻게 될까?

printf(15);

숫자 15가 출력돼야 할 것 같지만, 사실 출력되지 않는다.

내가 이런 식으로 컴퓨터한테 숫자 15를 출력하라고 명령해도, 컴퓨터는 ( )안에 있는 것이 숫자인지 문자인지 구분하지 못하기 때문이다.

그러면 이번엔 " "를 붙이고, 프로그램을 실행해보자.

printf("15");

프로그램을 실행하면 숫자 15가 출력된 것을 확인할 수 있다.

그렇다면 여기서 출력된 숫자 15는 숫자로 나온 걸까? 아니면 문장으로 나온걸까?

정답은 숫자가 아닌 문장 15로 출력된 것이다.

그렇다면 문장이 아닌 순수하게 숫자로 출력을 하고 싶으면 어떻게 해야 할까?

이때 사용되는 것이 '서식 지정자'이다.

 

3. 서식 지정자 Format Specifier

  • '%' 문자로 시작하며, 컴퓨터가 어떠한 정보를 어떤 식으로 해석할 건지 지정해주는 역할을 한다.
  • 서식 지정자와 치환할 값은 확실하게 짝을 맞춰야 한다.

서식 지정자의 종류

서식 지정자의 정의와 종류에 대해 말했으니, 이제 어떻게 동작하는지에 대해 설명하겠다.

#include <stdio.h>

int main(void) {
 printf("나이 : %d", 15);
 return 0;
}

해당 코드를 실행하면 아래와 같은 출력 결과가 나온다.

해당 출력 결과에서 '나이 : '는 문장으로, '15'는 숫자로 출력된 것이다.

프로그램을 실행했을 때

, (쉼표)를 기준으로 printf에게 정보를 두 개 넘겨주는데, 여기서 넘겨주는 정보 중 '%d'는 곧 정수 15로 치환된다.

서식 지정자와 치환할 값은 확실하게 짝을 맞춰야 한다고 했는데

왜 짝을 맞춰야 할까? 그 이유를 알아보기 위해 짝을 맞추지 않고 프로그램을 실행해보자.

//서식 지정자 2개, 치환할 값 1개인 경우
#include <stdio.h>

int main(void){
 printf("번호 : %d, 나이 : %d", 15);
 return 0;
}
//출력
//번호 : 15, 나이 : ??????
//번호는 정상적으로 15로 출력됐지만, 나이는 임의의 숫자로만 나왔다.
//서식 지정자 1개, 치환할 값 2개인 경우

#include <stdio.h>

int main(void){
 printf("번호 : %d", 15, 20);
 return 0;
}
//출력
//번호 : 15
//20은 출력되지 않음

서식 지정자와 치환할 값의 개수를 맞추지 않고 프로그램을 실행하면, 원하는 출력을 얻지 못하는 것을 확인했다.

그러면 다시 두 번째 코드에서 갯수를 맞추고, 프로그램을 실행해보자.

#include <stdio.h>

int main(void){
 printf("번호 : %d, 나이 : %d", 15, 20);
 return 0;
}

출력 결과, 각각 맞는 값이 나온 것을 확인할 수 있다.

'번호 : 15, 나이 : 20'으로 각 서식 지정자에 대응하는 값이 나온 것을 확인할 수 있다.

 

위의 과정들을 통해서, 서식 지정자를 사용할 때는 서식 지정자와 대체할 값의 개수를 왜 맞춰줘야 하는지에 대해서

알 수 있다.

'Programming > C' 카테고리의 다른 글

C언어 4. 연산자  (0) 2022.08.06
C언어 3. 상수  (0) 2022.08.05
C언어 2. 변수  (0) 2022.07.27
C언어 1. C언어 등장 배경 및 특징  (0) 2022.07.18