2장-1 자료형

C언어에서는 변수를 저장하는데 그 변수의 형식을 지정해줘야 합니다.

서로 다른 형식끼리 구분해주기도 하고, 이 값을 어떻게 저장해야 할지 컴파일러에게 알려주기도 합니다.

#include <stdio.h>
int main() {
  int a;
  a = 10;
  printf("a 의 값은 : %d", a);
  return 0;
}

a라는 이름의 변수를 선언했습니다. 자료형은 int입니다.

printf 함수를 호출합니다. a의 값은 : 10이라는 결과를 얻을 수 있습니다. %d가 어떻게 10으로 바뀌는지는 다음 장에서 배울겁니다.

자료형 종류

대부분 언어에서 자료형은 같습니다. 심지어는 데이터베이스에서도 비슷한 표현을 사용하죠.

자료형은 크게 세 가지로 구분됩니다. 문자형, 정수형, 실수형이 있습니다.
각 자료형별로 메모리를 사용하는 크기에 따라 자료형이 여러가지로 나뉩니다. 또한 부호의 유무로 자료형의 범위가 결정됩니다. 항상 양수인 자료형을 unsigned, 부호가 있어야 하는 자료를 signed로 선언합니다. 기본값은 signed입니다.

컴퓨터에서 저장하는 방식에 대하여

1bit는 0과 1을 저장할 수 있는 이진수 입니다. 1byte는 8bits입니다. 그래서 1byte는
28(256)개의 숫자를 구분할 수 있습니다.

Group Type names* Notes on size / precision
Character types char Exactly one byte in size. At least 8 bits.
char16_t Not smaller thanchar. At least 16 bits.
char32_t Not smaller thanchar16_t. At least 32 bits.
wchar_t Can represent the largest supported character set.
Integer types (signed) signed char Same size aschar. At least 8 bits.
signed short int Not smaller thanchar. At least 16 bits.
signed int Not smaller thanshort. At least 16 bits.
signed long int Not smaller thanint. At least 32 bits.
signed long long int Not smaller thanlong. At least 64 bits.
Integer types (unsigned) unsigned char (same size as their signed counterparts)
unsigned short int
unsigned int
unsigned long int
unsigned long long int
Floating-point types float
double Precision not less thanfloat
long double Precision not less thandouble
Boolean type bool
Void type void no storage
Null pointer decltype(nullptr)

출처 : cplusplus.com

문자형

문자형은 문자 한개를 저장합니다.

char a;와 같은 식으로 선언합니다. char은 character라는 뜻을 갖고 있습니다. char는 1바이트입니다.
한글은 2바이트 문자이기 때문에 한글을 다룰 땐 조심해야 합니다. 나중에 배열과 함께 배웁니다.

1바이트이므로 256개의 숫자를 구분할 수 있습니다. unsigned char는 부호가 없는 숫자로 0 ~ 255까지 저장할 수 있습니다. signed char는 부호가 있는 숫자로 -128 ~ 127까지 저장할 수 있습니다.

참고로, 문자형도 정수를 저장합니다. 숫자를 읽어와서 문자에 대응해서 표시하는겁니다.
따라서 문자형은 메모리 크기가 다른 정수형이라고 생각하셔도 됩니다.
정수형은 가장 작은 자료형이 4byte를 차지하기 때문에, 작은 숫자를 저장할 때는 char를 사용하기도 합니다.

정수형

정수형은 정수를 저장합니다.

4바이트를 저장하는 int가 기본형입니다. int는 integer라는 뜻입니다.

1바이트를 저장하는 char, 8바이트를 저장하는 long int, 16바이트를 저장할 수 있는 long long int가 있습니다.

4바이트인 int는 4,294,967,296개의 숫자를 구분할 수 있습니다. unsigned int는 0 ~ 4,294,967,295, signed int는 -2147483648 ~ 21473647까지 저장할 수 있습니다.

실수형

실수형은 실수를 저장합니다.

정수형이나 문자형과는 좀 다른 형태로 저장합니다.
실수형은 숫자와 소숫점의 위치를 저장합니다.

1.7 X 10-3

와 같은 형태로 저장합니다. 10은 제외하고, 1.7과 -3만 저장하는 형태죠. 여기서 숫자 1.7에는 굳이 소수점 자릿수까지 저장할 필요는 없겠죠?
그래서 실수형은 메모리의 크기와 숫자의 크기가 비례하지 않습니다. 숫자의 크기는 윗첨자에 영향을 받는건데, 가장 큰 메모리를 차지하는 부분은 앞에 있는 숫자 부분이기 때문이죠. 이걸 위의 표에서는 '정확도'라고 표현했습니다. 앞의 숫자가 길어질수록 반올림하거나 버림하는 단위가 작아진다는 의미니까요.

char과 ASCII 코드

신기한 것은 char형은 문자도 저장하고, 정수도 저장한다는 것입니다. 내용물에 따라 형식을 구분하는 걸까요? 아닙니다.

사실 C에서는 문자를 숫자로 저장합니다. 정확히는 ASCII(아스키)코드를 사용해서 저장합니다. 아스키 코드 위키에서 변환 표를 확인할 수 있습니다.

그래서 char형 변수를 사용할 때는 숫자형식으로 불러와도 되고, 문자형식으로 불러와도 됩니다. 자료형이 char인 변수에서 97을 문자로 불러오면 a, 숫자로 불러오면 97이 됩니다.
그러므로 프로그램 내부에서는 어떻게 처리하든 상관 없지만 그것을 출력할 때는 문자인지 정수인지 제대로 지정해줘야 Console에 프로그래머가 의도한 대로 표시됩니다.

다음 장에서는 printfscanf를 배우게 됩니다. printfscanf는 가장 기본적인 입/출력 함수입니다. 이 함수에서 문자와 정수를 구분하는 방법을 자료형과 연관지어 다룰겁니다

복습

#include<stdio.h>

int main()
{
    char ch = 'A'; //변수 선언
    printf("%c의 아스키코드= %d \n", ch, ch);
    ch = ch + 1;
    printf("%c의 아스키코드= %d \n", ch, ch);

    return 0;
}

요약

  • 아스키라는 텍스트 인코딩 방법을 알 수 있다.
  • 자료형의 종류를 알 수 있다.
  • 변수의 사용 목적에 따라 signed와 unsigned를 지정할 수 있다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다