티스토리 뷰
Table of Contents
1. 개요
프로그래밍에서는 숫자 뿐만 아니라 문자도 다뤄야 하기 때문에 문자를 위한 변수형으로 character 의 약자인 char가 존재합니다. 서식문자는 %c 로서, 이 서식문자로 입력 및 출력을 할 수 있습니다.
1 2 3 4 5 6 7 8 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void) { char a; scanf("%c",&a); printf("%c",a); return 0; } | cs |
만일 C언어에서 문자 a 를 그냥 a 로 표기한다면 이게 변수 a를 말하는 것인지, 문자 a를 말하는 것인지 알 수 없겠지요.
예를 들어 변수 a에 문자 a를 넣고 싶을 때, a = a; 라는 구문을 쓴다면,
a라는 변수에 a 변수의 값을 넣게 되니 아무 일도 일어나지 않을 것입니다.
따라서 문자는 아래와 같이 '문자' 의 형식으로 표기하도록 되어 있습니다. 작은 따옴표안에 문자를 쓰는 형식입니다.
1 2 3 4 5 6 7 8 9 10 11 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void) { char a; a = 'a'; printf("%c\n",a); a = 'e'; printf("%c",a); return 0; } | cs |
2. char
char는 문자를 담기 위해 만들어진 변수형이지만, 그 실체는 정수형 변수입니다. 컴퓨터는 문자도 0과 1로 저장하고 처리를 할 수 밖에 없기 때문에 'a'같은 문자도 결국 숫자로 변형하여 저장하는 것입니다. 아래와 같은 프로그램을 실행시켜 보면 그 사실을 확인해 볼 수 있습니다.
1 2 3 4 5 6 7 8 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void) { char a; a = 'e'; printf("숫자 : %d, 문자 : %c",a,a); return 0; } | cs |
위 예시를 돌려보면, '숫자 : 101, 문자 : e' 라는 출력이 나옵니다. 변수 a에는 사실 101을 이진수로 표현한 값이 저장되어 있으며, %d 로 출력할 땐 십진수로 101을 출력하고, %c로 출력할 땐 문자로 'e' 를 출력할 뿐입니다. char은 결국 1 byte의 저장 용량을 가지는 정수형 변수입니다.
3. 아스키 코드
char 은 정수형태로 문자를 저장하기 때문에 어떤 숫자가 어떤 문자를 표현하는 지에 대한 약속이 필요합니다.
1 2 3 4 5 6 7 8 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void) { char a; a = 98; printf("숫자 : %d, 문자 : %c",a,a); return 0; } | cs |
C언어에는 '98이 저장되어 있으면 b를 나타내는 것이다.' 라는 약속이 있기 때문에, 위와 같이 프로그램을 돌려보면 문자에 b가 출력 됨을 알 수 있습니다. C언어는 이 약속을 아스키 코드에 따라 정하였습니다. 아스키 코드란, 미국 표준 학회(ASA)에서 정한 기준으로 7 bit의 숫자와 문자들을 서로 일대일로 매칭시켜 놓은 것입니다. 그 안에는 0,1,2 같은 십진수에 사용하는 숫자들도 문자의 일종으로 포함되어 있습니다. 우선 아스키 코드의 이해를 위해 아래의 프로그램을 돌려 보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void) { char a; a = 0; // 아스키코드에서 0은 '없음'을 뜻하는 null에 매칭되어 있으며, 따라서 아무것도 출력하지 않는다. printf("숫자 : %d, 문자 : %c\n",a,a); a = '0'; printf("숫자 : %d, 문자 : %c",a,a); return 0; } | cs |
아스키 코드에서 48이 '0'을 뜻하기 때문에 숫자 0 과 문자 '0'은 다름을 알 수 있습니다. 숫자 0 - 문자 null, 숫자 48 - 문자 '0' 의 매칭이기 때문이지요.
추가로, char은 정수형 변수이기 때문에 가지는 특성으로 사칙연산이 가능하다는 점도 있습니다. 아스키코드로 'a'는 97, 'b'는 98, 'd' 는 100 이기 때문에 아래의 프로그램을 돌려 보면 b와 d가 출력됩니다.
1 2 3 4 5 6 7 8 9 10 11 | //code by RiKang, weeklyps.com #include <stdio.h> int main(void){ char a='a'; a++; // 'a'+1 -> 97+1 -> 98 -> 'b'가 된다. printf("%c\n",a); a+=2; // 'b'+2 -> 98+2 -> 100 -> 'd'가 된다. printf("%c\n",a); return 0; } | cs |
이를 활용하는 대표적인 경우로, 대문자에서 소문자로 변경하고 싶을 경우 변수이름+='a'-'A'; 와 같이 변경하는 경우가 있습니다. 알파벳은 순서대로 저장되어 있기 때문에 'B'+'a'-'A' => 1+'A'+'a'-'A' => 1+ 'a' => 'b' 로 대소문자 변경이 가능합니다. 아래의 표를 통해 어떤 숫자와 어떤 문자가 매칭되어 있는 지 알 수 있습니다.
4. 아스키 코드 표
10진수 | 문자 | 10진수 | 문자 |
0 | NULL | 64 | @ |
1 | SOH | 65 | A |
2 | STX | 66 | B |
3 | ETX | 67 | C |
4 | EOT | 68 | D |
5 | ENQ | 69 | E |
6 | ACK | 70 | F |
7 | BEL | 71 | G |
8 | BS | 72 | H |
9 | HT | 73 | I |
10 | LF | 74 | J |
11 | VT | 75 | K |
12 | FF | 76 | L |
13 | CR | 77 | M |
14 | SO | 78 | N |
15 | SI | 79 | O |
16 | DLE | 80 | P |
17 | DC1 | 81 | Q |
18 | SC2 | 82 | R |
19 | SC3 | 83 | S |
20 | SC4 | 84 | T |
21 | NAK | 85 | U |
22 | SYN | 86 | V |
23 | ETB | 87 | W |
24 | CAN | 88 | X |
25 | EM | 89 | Y |
26 | SUB | 90 | Z |
27 | ESC | 91 | [ |
28 | FS | 92 | \ |
29 | GS | 93 | ] |
30 | RS | 94 | ^ |
31 | US | 95 | _ |
32 | SP | 96 | . |
33 | ! | 97 | a |
34 | " | 98 | b |
35 | # | 99 | c |
36 | $ | 100 | d |
37 | % | 101 | e |
38 | & | 102 | f |
39 | ' | 103 | g |
40 | ( | 104 | h |
41 | ) | 105 | i |
42 | * | 106 | j |
43 | + | 107 | k |
44 | ' | 108 | l |
45 | - | 109 | m |
46 | . | 110 | n |
47 | / | 111 | o |
48 | 0 | 112 | p |
49 | 1 | 113 | q |
50 | 2 | 114 | r |
51 | 3 | 115 | s |
52 | 4 | 116 | t |
53 | 5 | 117 | u |
54 | 6 | 118 | v |
55 | 7 | 119 | w |
56 | 8 | 120 | x |
57 | 9 | 121 | y |
58 | : | 122 | z |
59 | ; | 123 | { |
60 | < | 124 | | |
61 | = | 125 | } |
62 | > | 126 | ~ |
63 | ? | 127 | DEL |
'C, C++' 카테고리의 다른 글
[ C언어 ] 9. 변수와 상수 (0) | 2017.11.20 |
---|---|
[ C언어 ] 8. 반복문 (for, while, do while ) (0) | 2017.11.20 |
[ C언어 ] 6. 조건문 (if, else, else if, switch case) (0) | 2017.11.14 |
[ C언어 ] 5. 변수 (2) (실수형 변수) (0) | 2017.11.13 |
[ C언어 ] 4. 변수 (1) (정수형 변수 int) (0) | 2017.11.10 |