문자 자료형
C언어에서 사용하는 문자 자료형은 다음과 같다.
자료형 | 크기 | 범위 | 형식 지정자 |
char | 1byte (8bit) | -128 ~ 127 | %c |
unsigned char | 1byte (8bit) | 0 ~ 255 | %c |
주의할 점은 char 자료형으로 선언한 변수에는 문자 그 자체가 담기는 것이 아니라 문자에 해당하는 정수 값, 즉 아스키 코드 값(ASCII)이 담긴다는 것이다. 아스키 코드에 대해서는 아래에서 조금 더 이야기해보도록 하고, 정수가 담긴다는 것을 확실히 이해하기 위해 몇 가지 예시를 통해 확인해보자.
#include <stdio.h>
int main()
{
char a = 65;
char b = 'A';
printf("%c와 %c는 같은 것입니다.", a, b);
return 0;
}
/******* 결과 *******
A와 A는 같은 것입니다.
********************/
char 자료형으로 선언한 변수 a에는 65라는 값을 할당하고, char 자료형으로 선언한 변수 b에는 'A'라는 값을 할당했다. 출력할 때 두 변수 모두 형식 지정자를 %c로 사용하면, 아스키 코드 값 65에 대응되는 문자 'A'가 출력된다. 변수 a와 같이 아스키 코드 값을 직접 할당해줘도 된다는 것을 알 수 있다.
#include <stdio.h>
int main()
{
char a = 65; // 10진수를 직접 할당
char b = 0x41; // 16진수를 직접 할당
char c = 0101; // 8진수를 직접 할당
printf("10진수 : %c\n16진수 : %c\n8진수 : %c", a, b, c);
return 0;
}
/**** 결과 ****
10진수 : A
16진수 : A
8진수 : A
**************/
위 코드에서 알 수 있듯이 아스키 코드 값을 직접 할당해줄 때는 10진수가 아닌 16진수, 8진수도 활용할 수 있다.
#include <stdio.h>
int main()
{
char a = 65;
char b = 'A';
printf("%d와 %d는 같은 것입니다.", a, b);
return 0;
}
/******** 결과 ********
65와 65는 같은 것입니다.
**********************/
첫 번째 코드와 거의 동일한 코드지만 출력할 때 두 변수 모두 형식 지정자를 %d로 사용해봤다. 변수 a와 b에 해당하는 값이 출력될 자리에 모두 65가 출력되는 것을 알 수 있다. 이를 통해 변수 b를 'A'로 할당해줬음에도 정수를 출력해주는 형식 지정자 %d를 사용하면, 'A'의 아스키 코드 값에 해당하는 정수가 출력되는 것을 알 수 있다.
#include <stdio.h>
int main()
{
char c = 'a';
printf("%c\n", c);
c += 1;
printf("%c\n", c);
c += 3;
printf("%c", c);
return 0;
}
/* 결과 *
a
b
e
********/
char 자료형으로 선언된 변수에 정수값이 담긴다면 위와 같은 연산도 가능하다는 것을 알 수 있다. 처음 선언한 'a'에 정수 1을 더해줬다. 상식적으로는 이해가 가지 않을 수 있지만, 컴퓨터 내부적으로는 'a'의 아스키 코드 값 97이 변수 c에 담겨있기 때문에 97에 1을 더해준 것과 동일한 연산 과정이라고 할 수 있다.
97 + 1 이라는 연산 과정을 거쳐 변수 c에는 98이라는 정수가 저장되어 있으므로, 형식 지정자 %c를 이용해 출력하면 아스키 코드 값 98에 대응되는 문자 'b'가 출력된다. 같은 원리로 변수 c에 3을 더해준 뒤 형식 지정자 %c를 이용해 출력하면 아스키 코드 값 101에 대응되는 문자 'e'가 출력된다.
아스키 코드 (ASCII)
아스키 코드를 굳이 다 외울 필요는 없지만 정말 간혹 가다가 알아야 할 필요가 있다. TMI긴 한데, 기업은행 NCS 모의고사를 풀면서 코딩 관련 문제가 나왔는데 a와 대응되는 아스키 코드 값이 무엇인지 모르면 못 푸는 문제가 나와서 신기해했던 기억이 있다. 모든 아스키 코드 값을 외울 필요는 전혀 없고, A와 a가 어떤 아스키 코드 값을 가지고 있는지 정도만 기억하면 될 것 같다. 아스키 코드 값을 알아야 하는 문제 중 거의 대부분은 알파벳과 관련된 것들로 나오고 알파벳 대문자 -> 알파벳 소문자 순으로 아스키 코드 값이 이어지기 때문이다.
A는 아스키 코드 값으로 65(0x41) 라는 정수 값을 가지고 있다.
a는 아스키 코드 값으로 97(0x61) 라는 정수 값을 가지고 있다.
추가적으로 말하자면 B는 66(0x42), C는 67(0x43), ... Z는 90(0x5A)라는 값을 가지며, b는 98(0x62), c는 99(0x63), ..., z는 122(0x7A) 값을 가진다. 굳이 외울 필요가 없고, 아무런 레퍼런스 없이 코딩 테스트를 풀거나 과제 등을 해야 할 때면 65나 97부터 위로 세어 올라가자. 살짝 조심해야 할 것은 Z와 a 사이에는 [ , \, ] , ^ , _ , `와 같은 특수문자가 끼어있기 때문에 꼭! 대문자는 65부터 세고 소문자는 97부터 세자.
혹, 알파벳 이외의 아스키 코드 값이 궁금하다면 여기를 확인하자.
Source
'Dev > C' 카테고리의 다른 글
[C언어] scanf 정리 (0) | 2020.06.25 |
---|---|
[C언어] 변수와 자료형, 그리고 상수 (0) | 2020.06.20 |
[C언어] 실수형 변수 출력 시 소수점 자릿수 조절 (반올림/올림/내림) (0) | 2020.06.17 |
[C언어] 실수 자료형 정리 (64bit Windows 기준) (0) | 2020.06.16 |
[C언어] 정수 자료형 정리 (64bit Windows 기준) (0) | 2020.06.15 |